随着今年 5 月 14 日 HTTP/2 协议正式版的发布,越来越多的网站开始部署 HTTP/2 了。我对 HTTP 协议一直都比较有兴趣,本文汇总一些关于 HTTP/2 的资料以及我写过的文章,会持续更新。如果大家有任何问题,欢迎留言交流探讨。

协议

HTTP/2 协议由以下两个 RFC 组成:

网上有一份由百度 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 之后,不支持 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 版本 »

本站使用「署名 4.0 国际」创作共享协议,相关说明 »

HTTP/2 资料汇总的更多相关文章

  1. 【转】自学成才秘籍!机器学习&深度学习经典资料汇总

      小编都深深的震惊了,到底是谁那么好整理了那么多干货性的书籍.小编对此人表示崇高的敬意,小编不是文章的生产者,只是文章的搬运工. <Brief History of Machine Learn ...

  2. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

  3. PyQt4学习资料汇总

    一个月前研究了下PyQt4,感觉比较不错.相比wxpython,界面美观了很多,并且将界面设计与代码逻辑很好的分离了开来.关于PyQt4的资料也不少,这里我将我找到的资料汇总一下,以防自己以后忘得一干 ...

  4. 【转】iOS超全开源框架、项目和学习资料汇总

    iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...

  5. 【同行说技术】iOS程序员从小白到大神必读资料汇总

    在文章<iOS程序员从小白到大神必读资料汇总(一)>里面介绍了很多iOS入门学习的资料,今天小编就发几篇技术进阶的文章,快来看看吧! 一.iOS后台模式开发指南 这个教程会教你在什么时候怎 ...

  6. SQL Server 127个SQL server热门资料汇总

      SQL Server 127个SQL server热门资料汇总     最近有许多关于如何学习SQLSERVER的问题,其实新手入门的资源和贴子很多,现在向大家隆重推荐经过精心整理的[SQLSer ...

  7. 机器学习&深度学习经典资料汇总,data.gov.uk大量公开数据

    <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.D ...

  8. MongoDB资料汇总专题[转发]

    转发下..这个哥收集的很全 MongoDB资料汇总专题 作者:nosqlfan http://blog.nosqlfan.com/html/3548.html 最后更新时间:2013-04-22 1. ...

  9. d3可视化实战00:d3的使用心得和学习资料汇总

    最近以来,我使用d3进行我的可视化工具的开发已经3个月了,同时也兼用其他一些图表类库,自我感觉稍微有点心得.之前我也写过相关文章,我涉及的数据可视化的实现技术和工具,但是那篇文章对于项目开发而言太浅了 ...

  10. 158个JAVA免豆精品资料汇总

    附件完整版下载地址: http://down.51cto.com/data/431561 附件部分预览~ java中国移动收费系统[源代码] http://down.51cto.com/data/70 ...

随机推荐

  1. 使用Node.js+Hexo+Github搭建个人博客

    一.为什么要花时间去搭建个人博客? 首先说说为什么我想要尝试着去搭建属于自己的Blog,古人云:“好记性不如烂笔头”.一开始我把笔记做在本子上.电脑上,发现要用的时候特别地不方便,而且越记越多.越多越 ...

  2. Vue报错——“Trailing spaces not allowed”

    在VSCode中开发Vue 报错:“Trailing spaces not allowed” 这是空格多了,删除多余的空格就可以了

  3. 西风 West Wind Html帮助构建器

    https://helpbuilder.west-wind.com/ 示例文档: https://helpbuilder.west-wind.com/docs/_03101e5wp.htm

  4. Ubuntu 下使用 Nginx 部署 .NET Core 2.0 网站

    前言 本文介绍如何在 Ubuntu 16.04 服务器上安装 .NET Core 2.0 SDK.创建项目与发布,并使用 Nginx 部署 .NET Core 2.0 Web 项目. 安装 .NET ...

  5. tensorflow卷积神经网络-【老鱼学tensorflow】

    前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我 ...

  6. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)

    public class Test_001 { public static void main(String[] args) { String a = "德玛西亚!"; Strin ...

  7. 执行Hive出现Error running child : java.lang.OutOfMemoryError: Java heap space错误

    具体错误日志如下: 2018-05-11 15:16:49,429 FATAL [main] org.apache.hadoop.mapred.YarnChild: Error running chi ...

  8. Hadoop HDFS安装、环境配置

    hadoop安装 进入Xftp将hadoop-2.7.3.tar.gz 复制到自己的虚拟机系统下的放软件的地方,我的是/soft/software 在虚拟机系统装软件文件里,进行解压缩并重命名 进入p ...

  9. using eclipse to write c programe 0

    参考:http://developer.51cto.com/art/200906/126363.htm http://www.cnblogs.com/feisky/archive/2010/03/21 ...

  10. 从Excel导数据到MySQL速度优化

    运行环境: Windows10 和 Deepin15.7, MySQL14.4, Java1.8.0_181使用工具: poi,JDBC数据规模: 35万条,5个文件夹,146个Excel文件(.xl ...