http2新特性
2019-03-12 本文已影响10人
沐雨芝录
2015年发布
2009年Google自行研发的SPDY在Chrome上验证成功后,被当作是HTTP/2的基础
- 完全采用二进制协议
- 支持多路复用(multiplexing)
- 支持头部压缩(header compression)
- 支持服务器推送(server push)
二进制协议
-
HTTP/2完全采用二进制协议,头信息和数据体都是二进制的,统称为帧(frame)。可以使得帧的识别更简单,并且传输信息更高效。其缺点是不便于调试,这就需要我们使用相应的工具来理解二进制的内容。
-
HTTP/2之前的协议都是基于ASCII码,好处是可读性好,容易上手。其缺点是可选的空格以及多变的终止符给识别帧造成了一些困难。
多路复用
-
在HTTP/1.1中,如果客户端为了提高性能想要在一个TCP连接内同时发起多个请求,每个请求必须按顺序被服务器依次响应,如果某一个请求特别耗时,那么后面的请求将会被一直阻塞。
-
而在HTTP/2中,如果在一个TCP连接内同时发起多个请求,每个消息可以被拆成互不依赖的帧并且各帧之间交错发送,然后在另一端重新把帧组装起来。这个特性就叫做多路复用。
头部压缩
每个HTTP请求时都会承载一组表头。在HTTP/1.x中表头是以纯文本形式传输,通常需要500~800字节的开销,如果有cookie的话甚至会达到上千字节。为了减少这种开销并且提升性能,HTTP/2使用了HPACK算法进行压缩
- 头部字段使用静态Huffman编码
服务端推送
HTTP/2为此提出了服务器推送机制,服务器端可以通过发起PUSH_PROMISE帧告知客户端,客户端收到服务器想要推送资源的意图后,可以决定是否接收推送。
服务器推送功能虽然很强大,但在实际使用中还需要考虑一些问题。第一个问题是如果客户端已经有缓存了,那么推送资源就是一种浪费。一种解决方法是只在用户第一次访问的时候推送资源。第二个问题是目前我们一般把静态资源放在CDN上,目前大部分CDN还不支持服务器推送,那么CDN和服务器推送到底哪个效果更好,这个可能还需要一些测试数据来做评判。