期待已久的 Hypertext Transfer Protocol Version 2 (HTTP/2) 终于在 2015 年 2 月 28 日定稿罗,也有 RFC 标准文件(RFC7540)了。
到底 HTTP/2 与原本的 1.1 有什么不同呢?我们来简单导览一下。
API 不用修改
HTTP/2 的多数 headers 与 1.1 是一样的,这表示 HTTP/2 可以完美的向下相容 1.1,代码无需做太大修改。也因此目前多数主流浏览器皆已支持 HTTP/2 协议。
建立在 SPDY 的基础上
几年前 Google 曾发布了令大家眼睛为之一亮的 SPDY 协议,标榜能加速 Web 的载入速度,并让网站上的多重档案可以并发下载。SPDY因为具备优异的网页传输及处理效能,因此后来从众多HTTP/2提案版本中脱颖而出,最终成为HTTP/2标准草案的原型。其竞争对手包含微软的 HTTP Speed+Mobility 等等协议。
HTTP/2的许多关键功能也都来自于SPDY,最大的改变就是加入一个多工(Multiplexing)的功能,可以允许浏览器在同时间内对多个服务器发送请求,并采用更高效率的标头压缩技术,整体而言,HTTP/2让用户端能以较少的连接数从服务器端取得资料,大幅增加网络传输速度。
服务器推送
HTTP/2 的一项新特色是加上了服务器推送功能,服务器可以主动推送内容到浏览器上。这增加了许多特别的新应用,例如可以在浏览器尚未发出请求前,预先推送 CSS 或页面 Layout 到浏览器上,增加之后的页面载入速度。
标头压缩与编码
HEAD 在传输的时候,有蛮多重复或冗余的资讯,这些资讯可藉由 Haffman 演算法压缩 HEAD 来增加传输速度。
流程下载控制与优先级
藉由控制下载流程的优先级,可以让 HTTP/2 的传输过程中,将最重要的内容优先下载,避免大量资讯堵在一起。
不强制采用加密传输
相较于 SPDY 强制要采用 https 协议,HTTP/2 并未强制传输要加密,不过在 HTTP/2 协议下,将更容易实现 TLS 传输加密。
如何使用 HTTP/2
基本上,主流浏览器大多已经支持。不过您可以在自己的服务器上加装 HTTP/2 模组来支持一些新的 HTTP/2 特性,例如 NodeJS 就有 node-http2
模组可以安装,详细的支持清单请看 HTTP/2 Implemention。
结语
对大多数的使用者来说,HTTP/2 的影响力不是那么的大,因为浏览器很快就支持了,也不会有任何浏览网站上的影响。但对于工程师而言,就有很多眉眉角角要注意。例如前端过去常常依靠 CSS sprites 与 Assets 合并来优化页面载入速度,也许未来的影响就没有那么大。后端则要考虑是否压缩 HEAD 或采用 TLS 等等。整体而言,对网络世界依旧是好事,毕竟从 1.1 版推出以来已经 16 年没有更新了,是时候迈向新时代的网络协议了。