iOS网络请求IT共论iOS 宝典

HTTP协议详解

2016-01-23  本文已影响3393人  fever105

HTTP协议详解

INDEX 原文地址


什么是HTTP协议


URL

schema://login@host[:port#]/path/..../[?query-string][#anchor]

    /*
     scheme: 协议名(如http,https,ftp)
     login: 登陆信息
     host: 服务器IP/域名
     port#:HTTP服务的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.cnblogs.com:8080
     path: 资源路径
     query-string: 发送给web服务器的数据
     anchor: 片段标识符
     */
http://www.mywebsite.com/sj/test/test.aspx?name=sivergn&x=true#stuff

    /*
     schema: http
     host: www.mywebsite.com
     path: /sj/test/test.aspx
     Query String: name=sviergn&x=true
     Anchor: stuff
     */

HTTP消息结构

请求消息/Request
GET http://www.cnblogs.com/  HTTP/1.1
Host:www.cnblogs.com
Request Line METHOD/path-to-resource HTTP/version-number
Request Header Field1 : Value
Request Header Field2 : Value
空行 空行
Request Body data(optional)
响应消息/Response
Response Line HTTP/version-number status-code message
Response Header Field1 : Value
Response Header Field2 : Value
空行 空行
Response Body data(optional)

HTTP方法

  1. 数据存放位置
  1. 数据大小限制
  1. 安全性
  1. 缓存

状态码


Header Field

Request Header Field / 请求头域
Response Header Field / 响应头域
/*
1. form-data;和boundary=之间有一个空格。
2. boundary=之后的内容可以是任意字符串。
*/
multipart/form-data;(空格)boundary=---------------------------195362999817818974031690194806

请求体格式


/*
原始boundary以及头尾部boundary的不同之处:
  ---------------------------195362999817818974031690194806 // oriBoundary,设置在Content-Type中
-----------------------------195362999817818974031690194806 // 头部boundary,--oriBoundary(前面2个-)
-----------------------------195362999817818974031690194806-- // 尾部boundary,--oriBoundary--(前后都有2个--)
*/

-----------------------------195362999817818974031690194806 // 头部boundary
Content-Disposition: form-data; name="userfile"; filename="vcpg" // 内容属性,form-data; name="服务器用于接收文件的参数名": filename="文件被发送给服务器时所使用的名称"
Content-Type: application/octet-stream // 万能文件类型
// 空行
// 文件内容开始
//...
// 文件内容结束
-----------------------------195362999817818974031690194806-- // 尾部boundary,其紧贴文件内容的结尾
-----------------------------418888951815204591197893077 // 文件1的头部boundary
Content-Disposition: form-data; name="userfile[]"; filename="文件1.md"
Content-Type: text/markdown
// 空行
// 文件1内容开始
// ...
// 文件1内容结束
-----------------------------418888951815204591197893077 // 文件2的头部boundary
Content-Disposition: form-data; name="userfile[]"; filename="文件2"
Content-Type: application/octet-stream
// 空行
// 文件2内容开始
// ...
// 文件2内容结束
-----------------------------418888951815204591197893077 // 文件3的头部boundary
Content-Disposition: form-data; name="userfile[]"; filename="文件3"
Content-Type: application/octet-stream
// 空行
// 文件3内容开始
// ...
// 文件3内容结束
-----------------------------418888951815204591197893077 // 参数username的头部boundary
Content-Disposition: form-data; name="username"

zhangsan
-----------------------------418888951815204591197893077 // 参数password的头部boundary
Content-Disposition: form-data; name="password"

zhangxx
-----------------------------418888951815204591197893077-- // 尾部boundary,表示结束


理解HTTP通讯方式

上一篇 下一篇

猜你喜欢

热点阅读