http协议_http的成长

HTTP/0.9

  • 只有一个GET命令
  • 没有HEADER等描述数据的信息
  • 服务器发送完毕,就关闭TCP连接 (一个TCP连接中可以包含多个HTTP请求)

 

HTTP/1.0

  • 增加了很多命令  (POST, DELETE 等)
  • 增加了status code 和 header
  • 多字符集支持、多部分发送、权限、缓存等

HTTP/1.1

  • 支持pipeline (流水线)
  • 增加host (可以在同一台物理服务器或同一个集群上运行多个http服务) 和一些其他命令
  • 默认是长连接
  • 支持同时打开多个 TCP 连接
  • 支持虚拟主机
  • 新增状态码 100
  • 支持分块传输编码
  • 新增缓存处理指令 max-age


HTTP/1.x 缺陷

HTTP/1.x 实现简单是以牺牲性能为代价的:

  • 客户端需要使用多个连接才能实现并发和缩短延迟;
  • 不会压缩请求和响应首部,从而导致不必要的网络流量;
  • 不支持有效的资源优先级,致使底层 TCP 连接的利用率低下。

 

HTTP/2

  • 以二进制形式传输数据
  • 同一个连接里面发送的多个请求不再需要按照顺序来返回,相当于支持了并行处理,使得传输效率有质的提升
  • 提供了头信息压缩以及推送(服务端主动发送一些数据,比如在客户端请求一个html页面时,服务器会主动将其链接的css,js文件主动传输,相当于html,css,js并行发送,以提高效率)等提高效率的功能

二进制分帧层

HTTP/2.0 将报文分成 HEADERS 帧和 DATA 帧,它们都是二进制格式的。

在通信过程中,只会有一个 TCP 连接存在,它承载了任意数量的双向数据流(Stream)。

  • 一个数据流(Stream)都有一个唯一标识符和可选的优先级信息,用于承载双向信息。
  • 消息(Message)是与逻辑请求或响应对应的完整的一系列帧。
  • 帧(Frame)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。

 

服务端推送

HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 page.html 页面,服务端就把 script.js 和 style.css 等与之相关的资源一起发给客户端。

 

首部压缩

HTTP/1.1 的首部带有大量信息,而且每次都要重复发送。

HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见过的首部字段表,从而避免了重复传输。

不仅如此,HTTP/2.0 也使用 Huffman 编码对首部字段进行压缩。

 

参考

HTTP/2.0

 

你可能感兴趣的:(http协议)