前端工程师再进化系列旨在探究前端前端基础技术的原理,实现细节和关联知识。小不正经才疏学浅,难免会有谬误,欢迎留言指正。
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相对简单,他们的请求和响应报文结构如下:
请求报文结构
响应报文结构
领取专属 10元无门槛券
私享最新 技术干货