本文介绍了HTTP2.0相对于HTTP1.1的显著提升,如多路复用技术、二进制分帧优化、首部压缩以提高效率,以及服务端推送功能,这些改进有助于减少网络拥塞,提升网页加载速度。
在 HTTP 1.1 协议中,客户端(浏览器)针对同一域名的请求有一定的数量限制。超过限制数目的请求会被阻塞。为了尽可能快的加载静态文件,常常使用 CDN 保存静态资源加快访问。
HTTP 2.0 的多路复用允许同时通过单一的 HTTP 连接发起多重请求,可以很容易的实现多流并行而不依赖多个 TCP 连接。它把协议通话的基本单位缩小为帧,每个帧对应一条逻辑信息,并行地在同一个 TCP 上交换信息。
HTTP 2.0 在应用层和传输层之间增加二进制分帧层。在二进制分帧层,HTTP 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制流格式编码。流具有流 ID 标识和优先级,通过优先级以及流依赖能够一定程度上解决关键请求被阻塞的问题。HTTP 1.x 中的首部信息被封装到 HEADER frame,Request Body 被封装到 DATA frame 里。
HTTP 2.0 通过让所有数据流共用同一个连接。TCP 连接的减少使网络拥塞情况得到改善,慢启动的时间较少,效率更高。并且减少了服务端链路压力,内存占用更少,连接吞吐量更大。
慢启动:TCP 连接随着时间自我调节,起初会限制连接的最大速度,如果传输成功,再慢慢提高传输速度。这也是 HTTP 效率低下的一个原因(突发性的 HTTP 请求需要适应 TCP 慢启动)。
HTTP 1.1 不支持首部压缩,HTTP 2.0 使用 HPACK 算法压缩报文首部,提高整体传输效率
在 HTTP 2.0 中,服务器可以在客户端未经请求许可的情况下,预先向客户端推送需要的内容,客户端在退出服务时可通过发送复位相关的请求来取消服务端的推送。
假设某个客户端主页发送请求,服务端响应后更新主页内容。此时只有该用户的客户端显示新内容,其它用户暂时不会刷新(它们没有发出主页请求)。采用服务端推送可以同时更新其它用户的主页内容,最重要的一点,这部分处理可以公共同一块缓存,效率极高。