随着今年 5 月 14 日 HTTP/2 协议正式版的发布,越来越多的网站开始部署 HTTP/2 了。我对 HTTP 协议一直都比较有兴趣,本文汇总一些关于 HTTP/2 的资料以及我写过的文章,会持续更新。如果大家有任何问题,欢迎留言交流探讨。
协议
HTTP/2 协议由以下两个 RFC 组成:
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- RFC 7541 - HPACK: Header Compression for HTTP/2
网上有一份由百度 FEX 翻译的「h2-13 中文版」,更新于一年前,也可以看看。h2-13 说明这是协议的第 13 版草案,HTTP/2 一共经历了 00~17 共 18 版草案才正式发布。
很多支持 HTTP/2 的 Web 服务器和客户端,都会标注出自己支持的具体版本,例如 h2、h2-14,分别表示自己支持正式版、第 14 版草案。有时候还会看到某个软件写着支持 h2c,这是指它支持运行于非加密通道之上的 HTTP/2(HTTP/2 Cleartext)。
HTTP/2 协议是从 SPDY 演变而来,SPDY 已经完成了使命并很快就会退出历史舞台(例如 Chrome 将在「2016 年初结束对 SPDY 的支持」;Nginx 在今年年底正式支持 HTTP/2 后,也不再支持 SPDY),故本文不再讨论 SPDY。
在「HTTP/2 官网」可以找到更多有关 HTTP/2 协议的资料。
部署
根据 caniuse 的统计,目前支持 HTTP/2 的浏览器有 Chrome 41+、Firefox 36+、Safari 9+、Windows 10 上的 IE 11 和 Edge。服务器方面则有 F5、H2O、nghttp2 等数十种选择,各种语言实现的都有。Nginx 则相对谨慎一些,在「本月初才提供对 HTTP/2 的实验性支持」,年底才会正式支持。这里有一份「HTTP/2 服务器及客户端」的完整清单。
「Akamai 这个页面」提供了 HTTP/1 和 HTTP/2 的对比,大家可以用自己的浏览器测试一下。
HTTP/2 协议本身并没有要求必须基于 TLS 部署,但是 Chrome 和 Firefox 这两大浏览器均表示只支持 HTTP/2 Over TLS。这样做一方面更安全,另一方面利用 TLS 的加密机制可以更好地穿透网络中间节点。
所以如果要部署 HTTP/2,首先需要将网站升级为 HTTPS。这个过程涉及到购买证书、生成证书和配置 Web 服务器等几个步骤,网上很多教程,这里略过。有两点需要注意:1)选择层级少的证书(点击 Chrome 地址栏的绿色小锁,查看证书信息就可以看到层级);2)一定不要使用 SHA1 算法的证书。
本博客先后使用过 H2O 和 Nginx 这两个服务器提供 HTTP/2 服务,下面是具体的介绍:
优化
将网站升级为 HTTPS 之后,多了 TLS 握手过程,如果没有做好优化肯定会比之前更慢。下面两篇对 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 的性能测试工具,下面在线工具的结果可以作为参考:
- Qualys SSL Server Test,用于测试 SSL 服务端;
- WebPagetest,老牌网站性能测试工具;
- GTmetrix,使用 PageSpeed、YSlow 和其他工具全面测试网站性能;
调试
不同于 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」和这篇文章:HTTP2 traffic in Wireshark。
书籍
以下书籍都有可供免费阅读的电子版:
- http2 explained(中文翻译)
- HTTP/2: A New Excerpt from High Performance Browser Networking(即「High Performance Browser Networking」第十二章,Ilya Grigorik 编写)
本文链接:https://imququ.com/post/http2-resource.html
--EOF--
于 2015-08-31 00:50:46 发表于「前端技术」分类下。
专题「HTTP 相关」的其他文章 »
- HTTP/2 中的 Server Push 讨论 (Jun 16, 2015)
- 浏览器中常见网络协议介绍 (Jun 03, 2015)
- HTTP/2 与 WEB 性能优化(三) (Jun 01, 2015)
- HTTP/2 与 WEB 性能优化(二) (May 22, 2015)
- HTTP/2 与 WEB 性能优化(一) (May 19, 2015)
- Referrer Policy 介绍「续」 (May 11, 2015)
- Referrer 还是 Referer? (May 09, 2015)
- Referrer Policy 介绍 (May 06, 2015)
- HTTP 协议中的 Transfer-Encoding (May 04, 2015)
- HTTP 请求头中的 X-Forwarded-For (May 02, 2015)
来源:https://imququ.com/post/http2-resource.html