HTTP(1) —— 请求报文和响应报文
请求报文
请求报文分为三个部分,请求行、请求头和请求体,请求体前有一行空行。
1 | POST / HTTP/1.1 |
在上面的例子中,第1行为请求行,第2-10行为请求头,第11行为空行分隔,第12行为使用x-www-form-urlencoded编码的表单数据。
响应报文
响应报文分为三个部分,状态行、响应头和响应体,响应体前有一行空行。
1 | HTTP/1.1 200 OK |
第1行为状态行,第2-4行为响应头,第5行为空行分隔,第6行为响应体。
发送数据
以请求报文为例,我们在使用 HTTP 发送请求时,可以把想要发送的数据放在请求行、请求头或请求体中。
以服务器的会话管理为例,由于HTTP本身是无状态的,因此通常根据客户端发送来的sessionid来确定客户端的身份,常用的方式有以下两种:
第一种是在服务器在返回给用户的页面中,将所有 url 后追加 sessionid,这样用户在收到响应之后,不论是点击链接还是提交表单,服务器都能识别出客户端的身份,从而实现了会话保持。这种情况就是把数据放在请求行中。
1 | GET /?sessionid=123456 HTTP/1.1 |
此外,请求头中的 Cookie 字段也可以用来传输 sessionid,这种情况就是把数据放在请求头中,我们也可以在HTTP的基础上定义自己的请求头。
1 | GET / HTTP/1.1 |
上面的两种方式一般都用来发送结构比较简单的数据,更一般的方式是把数据放在请求体。
由于 HTTP 协议以 ASCII 码来传输,并没有规定请求体的结构,因此开发者可以自己决定请求体的格式,并通过请求头中的Content-Type字段来告诉服务器采用的编码方式。
Content-Type
application/x-www-form-urlencoded
浏览器的<form>表单在未设置enctype属性时,会用application/x-www-form-urlencoded类型来提交数据。
这种类型会把数据按照key1=val1&key2=val2的结构组织,并对key和value分别使用UrlEncode编码。
1 | POST / HTTP/1.1 |
multipart/form-data
相关文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Robby!
评论

