老青菜

HTTP/2.0 简介

2019-06-13

2015年,IETF(Internet Engineering Task Force)基于 SPDY 推出了HTTP/2.0,HTTP/2.0支持HTTP/1.1所有核心功能,优化了HTTP/1.1的传输,解决了队头阻塞的问题,同时减少了请求响应的等待时间,提高了传输效率。
和SPDY一样,HTTP/2.0也提供了多路复用、优先级控制、流量控制、头部压缩、服务端推送等等特性。但是由于是基于TCP的,依然没有解决TCP传输层的队头阻塞,特别是单个TCP连接的情况。

接下来我们详细的了解些这些特性。

Streams and Multiplexing

多路流。即针对单个域名,Client和Server只维护一个TCP连接,支持并发无限个Stream,每个流对应一个请求,Stream上承载了Request、Response Message,这些Message又被拆分成多个Frame传输。新的消息交换如下:


这样做的好处显而易见,比如说:

  1. 减少了TCP三次握手(需要1个RTT)、TLS握手(需要2个RTT);
  2. 避免了TCP慢启动的拥塞控制;
  3. Server的并发数得到了最大利用,比如单台tomcat并发1000,那么同时可以支持1000个Client。

Flow Conrtol

流量控制,使用流进行多路复用会导致争用TCP连接,导致流阻塞,流量控制方案作用于单个流或整个连接,确保同一连接上的流不会破坏性地互相干扰。和TCP的Flow Control不同,TCP的Flow Control作用于整个连接。详细的介绍可以看这篇文章Flow Control

Stream Priority

流的优先级控制,由于单个TCP连接允许无限并发流,那么在流量有限的时候,或者需要优先响应某些资源的时候,就需要一个优先级顺序来管理这些流。详细的介绍可以看这篇文章Stream Priority

Server Push

服务器推送,HTTP/2.0允许Server抢先发送(“推送”)资源给Client,并且与Client之前发起的Request相关联,这样大大减少了页面资源加载的等待时间,比如单个资源能减少20ms左右的加载时间。当前前提是Server知道Client需要哪些资源,而这些一般容器都实现了,比如nginx里就可以配置。详细的介绍可以看这篇文章Server Push

Header Compression

头部压缩,HTTP/2.0使用HPACK压缩算法,简化了消息内容,增加传输效率。HPACK实际上是Indexs Tables(索引表)、Static Huffman Encoding(静态霍夫曼编码)的结合。效果也很显著,一个简单HTTP Header在HTTP/1.1中占600Byte左右,在HTTP/2.0中首次请求会被压缩到300Byte,后续请求会被压缩到30Byte,压缩率达到95%左右(实际可能会少一点点)。详细的介绍可以看这篇文章Header Compression

参考链接

rfc7540
rfc7541

Tags: HTTP
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章