介绍

Google 在 2009 年推出了 SPDY 协议(取 speedy 的谐音,更快的意思),基于 TCP 的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验,目标是降低 50% 的页面加载时间。2012 年,IETF HTTPBIS 工作小组(负责 HTTP/2 标准化工作),决定把 SPDY 作为 HTTP/2 的原型。三年后,进入标准化流程最后阶段,Google 也宣布 SPDY 在 2016 年停止开发,转而采用 HTTP/2。

SPDY 主要功能

基本特性

  • 数据流的多路复用,允许在一个连接上无限制并发流,TCP 效率更高、更少网络连接、发出更少更密集的数据包。
  • 请求优先级,为每个请求分配一个优先级,防止在网络通道被非关键资源堵塞时,高优先级的请求被挂起。
  • HTTP 报头压缩,压缩请求和响应 HTTP 报头,减少传输的数据包数量和字节数。

高级特性

  • 服务器启动流,能用来分发内容到客户端,而不需要客户端发起请求。

HTTP/2 主要功能

  • 二进制格式传输数据,相较于 HTTP/1.x 的文本格式,在协议的解析和优化扩展上带来更多的优势和可能。
  • 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费很多带宽资源。
  • 多路复用,所有的请求都是通过一个 TCP 连接并发完成,流支持优先级和流量控制。HTTP/1.x 虽然可以利用一个连接完成多次请求,但多个请求之间有先后顺序,后面发送的请求必须等待上一个请求返回才能发送响应。容易导致后面的请求被阻塞。
  • Server Push,服务端能够更快的把资源推送给客户端。比如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户解析 HTML 再发送这些请求。

HTTP/2 主要是 HTTP/1.x 在底层传输机制上的完全重构,HTTP/2 基本兼容 HTTP/1.x 的语义,只不过不再是文本传输。

HTTP/2 和 SPDY 不同的地方

  • HTTP/2 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS。
  • HTTP/2 消息头的压缩算法采用 HPACK,而 SPDY 采用的是 DELEFT。

HPACK 是专门为压缩报头而设计的算法,使用预定义的 token、动态表以及哈夫曼压缩。比 DELEFT 压缩效果更明显。