最近看到了些关于 HTTP/2 的资料,想来 HTTP/2 从 Google 想搞 SPDY 以来也是有好些个年头的,不知道现在的情况如何。于是乎,带着一些好奇心就开始进行了一些探索,然后,发现结果还算令人满意。在我访问了大部分网站中,有部分或者全局使用了 HTTP/2,至于怎么发现的,后面我会介绍一个工具;然而,好些网站的部分使用并不是网站主自己想使用,而是引用了一些 CDN 或者站外内容引用而让我觉得有使用的感觉,这是从供应方的角度去看的。

另外一个方面就是使用方,作为一个网站,其价值可能更多得还是来自于浏览器的访问,当然你也可以说当前网络状况是超过 60% 的流量都是爬虫,但是,这些爬虫产生的价值可能不是供应方所需要的。因此,我也了解了一下截止到目前(2018-07-10) 为止,对 HTTP/2 提供支持的浏览器,现在的情况是这样的:

根据 caniuse.com这个网站的统计数据, 截止到当前状态,包括移动端和 PC 端的用户,已经有将近 84% 的用户使用的浏览器是支持 HTTP/2 了,当然,我没有去细究这份数据的来源以及统计的样本集,但是,这至少可以窥得一斑,现在是时候来了解一下 HTTP/2 了!

HTTP/2 是啥

从 Wiki 中的介绍可以看到,HTTP/2 是 HTTP 的第 2 版,在之前我们常用的 HTTP 版本是 HTTP/1.1,同时也是很多 Web 服务器默认使用的版本。那么为什么会出现 HTTP/2 呢?主要原因我认为有这么几个:

于是乎,有些新的东西需要被推出来,但是,一开始这却不是 HTTP/2,而是 Google 家一直在推荐的 SPDY(speedy)。

SPDY

现在打开一些网站你甚至于还可以看到 SPDY 协议,这个东西是 Google 为了克服 HTTP1.1 而设计的一套通信协议,同时也是后面 HTTP/2 的基石。SPDY 最初的设计理想是为了降低延迟,其实可以理解成为了解决我上面说的 HTTP1.1 的第一条缺点,而采用 TCP 通道。

与 HTTP1.1 相比,SPDY 新增的特性有(摘抄 Wiki):

HTTP/2

随着协议的推进,权威队伍 IETF 觉得该做点实事了,于是 HTTP/2 的进程就加快了,最终在 2015 年标准正式发表。现在已经被大多数浏览器所支持。但是,要说到 HTTP/2 就得说一下 HTTP/2 有多个不同的版本,其实区别在于当我们默认使用 HTTP/1.1 访问时,服务器会和浏览器交流说服务器已经支持 HTTP/2 了,被使用的方式分别有:

在现在浏览器实现中,大部分的浏览器都声称只实现基于加密的 HTTP/2,同时,因为谷歌的带队放弃 NPN,现在被支持比较广泛的也就剩 h2-ALPN 了。

查看网站 HTTP/2 支持的工具

其实在 Chrome 的扩展商店中有个应用可以提醒你当前浏览的网站是否支持 HTTP/2,这个扩展的名字是:HTTP/2 and SPDY indicator。当你访问的网站支持 HTTP/2 时,它的显示是这样的:

如果你访问的网站是没有支持的,那么你看到的样子是这样的:

变透明了。OK,这就是关于 HTTP/2 的一些简单理解。