随着今年 5 月 14 日 HTTP/2 协议正式版的发布,愈来愈多的网站开始部署 HTTP/2 了。我对 HTTP 协议一直都比较有兴趣,本文汇总一些关于 HTTP/2 的资料以及我写过的文章,会持续更新。若是你们有任何问题,欢迎留言交流探讨。html
HTTP/2 协议由如下两个 RFC 组成:nginx
网上有一份由百度 FEX 翻译的「h2-13 中文版」,更新于一年前,也能够看看。h2-13 说明这是协议的第 13 版草案,HTTP/2 一共经历了 00~17 共 18 版草案才正式发布。git
不少支持 HTTP/2 的 Web 服务器和客户端,都会标注出本身支持的具体版本,例如 h二、h2-14,分别表示本身支持正式版、第 14 版草案。有时候还会看到某个软件写着支持 h2c,这是指它支持运行于非加密通道之上的 HTTP/2(HTTP/2 Cleartext)。github
HTTP/2 协议是从 SPDY 演变而来,SPDY 已经完成了使命并很快就会退出历史舞台(例如 Chrome 将在「2016 年初结束对 SPDY 的支持」;Nginx 在今年年末正式支持 HTTP/2 后,也再也不支持 SPDY),故本文再也不讨论 SPDY。web
在「HTTP/2 官网」能够找到更多有关 HTTP/2 协议的资料。算法
根据 caniuse 的统计,目前支持 HTTP/2 的浏览器有 Chrome 41+、Firefox 36+、Safari 9+、Windows 10 上的 IE 11 和 Edge。服务器方面则有 F五、H2O、nghttp2 等数十种选择,各类语言实现的都有。Nginx 则相对谨慎一些,在「本月初才提供对 HTTP/2 的实验性支持」,年末才会正式支持。这里有一份「HTTP/2 服务器及客户端」的完整清单。chrome
「Akamai 这个页面」提供了 HTTP/1 和 HTTP/2 的对比,你们能够用本身的浏览器测试一下。浏览器
升级到 HTTP/2 以后,不支持 HTTP/2 的浏览器还能正常访问么?若是有疑问,推荐阅读:谈谈 HTTP/2 的协议协商机制。安全
HTTP/2 协议自己并无要求必须基于 TLS 部署,但当前全部浏览器均只支持 HTTP/2 Over TLS。这样作一方面更安全,另外一方面利用 TLS 的加密机制能够更好地穿透网络中间节点。性能优化
因此若是要部署 HTTP/2,首先须要将网站升级为 HTTPS。这个过程涉及到购买证书、生成证书和配置 Web 服务器等几个步骤,网上不少教程,这里略过。有两点须要注意:1)选择层级少的证书(点击 Chrome 地址栏的绿色小锁,在详情中的证书信息里能够看到层级);2)必定不要使用 SHA1 算法的证书。本站有很多关于 HTTPS 和证书的文章,供参考:
本博客前后使用过 H2O 和 Nginx 这两个服务器提供 HTTP/2 服务,下面是具体的介绍:
若是你在使用 Apache,能够参考这篇文章启用 HTTP/2。
对于喜欢折腾的人来讲,Caddy 应该是个不错的选择,这个基于 Go 语言开发的 Web Server 对 HTTP/2 和 HTTPS 有着良好的支持,最近还开始支持 QUIC 协议。
另外,如今国外一些 CDN 也开始支持 HTTP/2 了,例如 KeyCDN,能够根据本身实际须要选用。KeyCDN 写过一篇描述自家和全球 HTTP/2 部署状况统计的文章:HTTP/2 Statistics: KeyCDN Report on HTTP/2 Distribution。
HTTP/2 协议中对 TLS 有了更严格的限制,例如 HTTP/2 中只能使用 TLSv1.2+,还禁用了几百种 CipherSuite。若是你遇到了启用 HTTP/2 致使网站打不开的问题,必定要看看《从启用 HTTP/2 致使网站没法访问提及》这篇文章。
Google 在 Chrome 51 中移除了 NPN,若是你的服务器不支持 ALPN,在 Chrome 51+ 中没法协商到 HTTP/2,《为何咱们应该尽快支持 ALPN?》这篇文章里有更多描述。
Nginx 1.9.15~1.10.x 在处理 HTTP/2 POST 时考虑不周,致使特定场景下一些浏览器会产生「没法链接到服务器」错误。《谈谈 Nginx 的 HTTP/2 POST Bug》这篇文章里有详细说明。
将网站升级为 HTTPS 以后,多了 TLS 握手过程,以后的所有流量都会加密,若是没有作好优化确定会比以前更慢。实际上,如今 TLS 已经很快了,这里有一个性能专家 igrigorik 创建的网站:Is TLS Fast Yet?,能够关注下。
下面几篇对 Nginx 的配置心得,是我在本博客实践以后写的,能够先看看:
HTTP/2 究竟会给 WPO(Web Performance Optimization)带来什么,我也写了一系列文章来介绍:
在 Velocity 2015 • SC 会议上,来自 Google 的 Ilya Grigorik 分享了「HTTP/2 is here, let's optimize! - Yesterday's perf best-practices are today's HTTP/2 anti-patterns」话题,重点讲述针对 HTTP/2 和 HTTP/1 进行 WPO 的相同和不一样之处,值得推荐。
HTTP/2 中的 Server Push,能够减小网络延迟对性能带来的影响,优化首次访问速度。但它可能形成流量浪费,具体细节请看个人这两篇文章:
HTTP/2 中的头部压缩,能够减小头部体积,提升传输效率。有关这项技术原理和实现的详细介绍,请看个人这篇文章:
目前我没有找到只针对 HTTP/2 的测试工具,下面性能及安全在线测试网站的结果能够做为参考:
不一样于 HTTP/1 的文本格式报文,HTTP/2 传输的都是二进制帧,调试起来要麻烦一些。
首先,要辨别某个网站是否启用了 HTTP/2,能够经过浏览器开发工具的「网络」面板中的 Protocol 字段查看。也能够经过扩展在浏览器地址栏显示当前的协议类型,HTTP/2 指示器扩展:Chrome 版、Firefox 版。
在 Chrome 地址栏输入chrome://net-internals/#http2
,打开 Chrome 自带的 HTTP/2 查看工具,能够很方便地查看 HTTP/2 帧信息。
新版 Wireshark(dev 1.99)能够调试 HTTP/2,详细介绍请查看「官网 Wiki」和个人这篇文章:调试 HTTP/2 流量。使用 nghttp2 也能够方便地调试 HTTP/2 流量,详情见这里。
更多调试工具能够在 CloudFlare 这篇文章里找到:Tools for debugging, testing and using HTTP/2。
如下书籍都有可供免费阅读的电子版:
最近发现一个 HTTP/2 日文网站:http2.info,列举了不少有关 HTTP/2 的资料,懂日语的同窗能够去看看。
最后放上我最近作的一个关于 HTTP/2 的分享:《HTTP/2:新的机遇与挑战》。
本文连接:https://imququ.com/post/http2-resource.html,参与评论 »
--EOF--
发表于 2015-08-31 00:50:46 ,并被添加「 HTTP2 」标签 ,最后修改于 2016-08-30 09:11:49 。查看本文 Markdown 版本 »