HTTP版本变化

520 阅读2分钟
HTTP0.9
最早的HTTP协议的版本,功能简单,仅支持GET的请求方式。
HTTP1.0
HTTP1.0在HTTP0.9的基础上做出了改进:
·增加了HTTP版本号。如GET /.../ HTTP/1.0。
·HTTP请求和回应格式发生变化:增加了header,请求和响应都有header。
·增加了一些状态码。
·根据content-Type可以支持多种数据格式。

但是HTTP1.0版本不支持keep-alive,每次TCP连接之后仅能发送一个请求,服务器响应后会关闭连接。下次要重新建立连接,速度很慢且有很大的性能浪费。

HTTP1.1
  1. HTTP1.1最大的改进是支持持久连接,一个TCP连接可以允许多个HTTP请求。不用connnection:keep-alive,默认TCP不关闭连接。
  2. 引入了管道机制,一个请求发出去了不用等其回来就可以发送第二个请求出去。
  3. 支持分块传输编码,不必说明Content-Length,只要请求或者回应的头信息有Transfer-Encoding字段,就表明回应由数量未定的数据块组成。最后一个大小为0的块,表示数据发完。
  4. 客户端请求头增加HOST字段。虚拟机兴起,一台服务器可以有多个虚拟主机,IP地址相同。因为可以有多个域名解析到同一个IP上,要区分请求的到底是哪个域名,HOST字段用来指定服务器的域名。
  5. 新增状态码100,客户端在发送request消息实体之前发送request header,如果服务器接受请求就回复响应码100。(节约带宽)
  6. 新增请求方式PUT、OPTION、DELETE等。
HTTP2.0

虽然HTTP1.1支持持久连接,但是同一TCP连接里面数据通信按照次序来进行,服务器处理完一个才能处理下一个,若前面处理时间长,后面就会排队很久,造成“队头阻塞”。

  1. 解决上述问题,HTTP2.0增加多工模式,客户端可同时发送多个请求,服务器也可以同时处理多个请求,避免队头阻塞。

  2. 二进制分帧:headers帧和data帧,二进制格式。

  3. 首部压缩:客户端和服务器共同维护首部字段表,同时发送多个请求如果头一样就消除重复部分,避免重复传输。

  4. 服务端推送,客户端请求某资源,服务器主动把相关资源发给客户端,不用客户端再次发起请求。