HTTP2 规范(RFC7540)在2015年发布,即将迈入第5个年头,你的网站有没有支持呢?今天给大家普及下HTTP2一些基本概念和开启方式

HTTP2的优势

HTTP1.x在当代长肥网络环境(高带宽高延时)下面临以下问题:

  1. 处理的单个请求资源越来越大,而单连接只能串行请求(同个连接只能完成一个http请求后才能处理下个请求),无法并发处理。
  2. 请求体需要携带完整的巨大的头部,才能保持请求无状态

背负众望的HTTP2终于在2015年5月的RFC7540推出,HTTP2基于tcp协议,且仅在应用层变动。最大的特点就是多路复用,并以二进制方式并压缩报文,传输量大幅度减少,还能实现服务器消息推送(类似websocket)等强大功能,老的scheme不会变,不会出现「http2://」这样的网址,沿用「http://」,因此对客户端而言,兼容性很高,而且对于现代浏览器来说,使用HTTP2打开网站比http1.x更快。

HTTP2的一些新名词

HTTP2采用新的传输设计,所以出现了很多新名词,我们一起梳理下:

  • 连接(connection)
  • 消息(message)
  • 流(stream)
  • 帧(frame)

如下图所示:最外层是连接,它可以包含多个,实现多路复用。一条中可以包含多条消息,如request和response。一条消息中可以包含多条,它是最小单位,以二进制压缩存放数据内容。

同一个下,传输帧是有序的,跨stream可以是无序的,这也是实现多路复用的关键。如下图所示:

更多详细信息可以看这里:https://developers.google.com/web/fundamentals/performance/http2

快速开启HTTP2

如果你跟我一样,自己的博客网站用的nginx作为前置代理,并使用了HTTPS,那么为你的网站开启HTTP2是非常简单的。需要保证拥有以下基础环境:

  • Nginx版本不低于1.9.5版本
  • OpenSSL版本不低于1.0.2版本

满足以上条件,只要在你的nginx配置文件里,更新一行配置就可以开启HTTP2:

server {
    # 添加 http2
    listen 443 ssl http2;
    ...
}

重启你的nginx服务,即刻生效。

如何查看开启效果:

  • 装一个chrome插件——HTTP/2 and SPDY indicator,快速验证,如果网站是支持HTTP2,插件的图标是深蓝色的,反之是灰色。
  • 打开chrome dev tools(右键chrome浏览器,点击「检查」),查看「网络面板」,观察Protocol那一列,如果显示是h2,就代表走HTTP2协议了:
  • 如果你是抓包玩家,还可以通过wireshark看到更多详细信息。当然由于使用了https(或者叫TLS),普通的抓包手法是无法看到被加密的数据内容的,你可以通过添加SSLKEYLOGFILE环境变量配合wireshark就能看到解密后的内容。下面是MacOS上用chrome的例子:
  1. 创建log file
touch ~/sshlog/output.log
  1. 打开wireshark配置Preferences界面,在Protocols找到SSL选项,配置如下后,针对目标HTTP2网站(如本站https://davidlovezoe.club)开启抓包
  1. 添加环境变量并指向刚才创建的文件,启动chrome时添加–ssl-key-log-file参数
export SSLKEYLOGFILE=/Users/davidli/sshlog/output.log;/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-key-log-file=/Users/davidli/sshlog/output.log
  1. 打开开启HTTP2的网站(如本站https://davidlovezoe.club),注意务必保证是全新打开,不要走缓存或长连接
  2. 可以看到wireshark上已经出现各种请求了,输入「http2」进行过滤,挑选一个请求,并选择「Decrypted SSL」标签,就能看到解密后的数据内容了:

我抓的包在这里,供大家参考:https://pan.baidu.com/s/1ZwVVbgP0v2doIxJxf9D_Kg 提取码: cffs

2020年了,HTTP2你值得拥有!

7 对 “HTTP2,你值得拥有”的想法;

  1. It’s a pity you don’t have a donate button! I’d certainly donate to
    this fantastic blog! I suppose for now i’ll settle for book-marking and adding your RSS feed to my Google account.
    I look forward to fresh updates and will talk about this blog with my Facebook group.
    Talk soon!

  2. Attractive section of content. I just stumbled upkn yokur bllg and in accession capital to assert that I
    get in fact enjoyed account your blog posts. Any way I will be subscribing
    to your augment and even I achievement you access consistently rapidly.

发表评论

邮箱地址不会被公开。 必填项已用*标注