前端工程师再进化:No.2 HTTP协议之HTTP报文

前端工程师再进化系列旨在探究前端前端基础技术的原理,实现细节和关联知识。小不正经才疏学浅,难免会有谬误,欢迎留言指正。

HTTP是一个建立在TCP之上的应用协议,所以HTTP的在浏览器和服务器数据交换之前,需要先建立TCP连接。一个TCP连接包含三个部分:三次握手建立连接,数据传输,四次挥手断开连接。HTTP的数据交换就是传输部分。

图中展现的是HTTP 1.1的数据传输过程,即客户端发送请求之后,服务端响应一个请求,客户端收到响应之后才能继续发送请求。

HTTP 0.9, HTTP 1.0 中每次TCP连接只能发送一个请求和一个响应。HTTP 2则可以同时发送多个请求和接收多个响应。如图所示:

HTTP请求报文结构

第1行称为起始行(Start Line), 包含了请求方法(标准叫法为HTTP谓词), 资源路径,和请求协议及版本。 这三个之间以一个空格分隔,并以回车换行(CRLF)结束。

第2行起至第1个空行(仅CRLF)之间为HTTP首部,每个一行,并以回车换行结束。每一个首部以KeyValue的形式呈现,Key和Value之间以冒号和空格分隔。

空行之后的内容为请求体(body), 请求体是可选的, 可以是文本,也可以是二进制文件,还可以为空。

例如Chrome使用百度搜索hello world, 请求报文结构如下:

HTTP响应报文结构

第1行称为起始行,包含了协议及版本,状态码和状态注释, 这三个之间用空格分隔,并以回车换行结束。状态注释在实际使用中用处不大。

和请求报文一行,第2行起至第1个空行之间为HTTP首部,每个一行,并以回车结束。//由于客户端和服务器之间采用的是协商机制,客户端请求部分首部会提供多个值给服务器端选择,而服务器端往往提供确定的一个值告诉客户端服务器端选择的值。当然,有时候服务器端响应部分首部也会提供多个值给客户端选择,以便进一步的协商。

空行之后的内容为响应体(body). 响应体是可选的,可以是文本,也可以是二进制文件,还可以为空。

依然以Chrome使用百度搜索hello world, 响应报文结构如下:

HTTP 0.9报文结构

以上是标准的请求和响应报文结构, HTTP 0.9相对简单,他们的请求和响应报文结构如下:

请求报文结构

响应报文结构

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180915G0A4EI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励