HTTP2,你值得拥有
HTTP2 规范(RFC7540)在2015年发布,即将迈入第5个年头,你的网站有没有支持呢?今天给大家普及下HTTP2一些基本概念和开启方式
HTTP2的优势
HTTP1.x在当代长肥网络环境(高带宽高延时)下面临以下问题:
- 处理的单个请求资源越来越大,而单连接只能串行请求(同个连接只能完成一个http请求后才能处理下个请求),无法并发处理。
- 请求体需要携带完整的巨大的头部,才能保持请求无状态
背负众望的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的例子:
- 创建log file
touch ~/sshlog/output.log
- 打开wireshark配置Preferences界面,在Protocols找到SSL选项,配置如下后,针对目标HTTP2网站(如本站https://davidlovezoe.club)开启抓包
- 添加环境变量并指向刚才创建的文件,启动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
- 打开开启HTTP2的网站(如本站https://davidlovezoe.club),注意务必保证是全新打开,不要走缓存或长连接
- 可以看到wireshark上已经出现各种请求了,输入「http2」进行过滤,挑选一个请求,并选择「Decrypted SSL」标签,就能看到解密后的数据内容了:
我抓的包在这里,供大家参考:https://pan.baidu.com/s/1ZwVVbgP0v2doIxJxf9D_Kg 提取码: cffs
2020年了,HTTP2你值得拥有!
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!
Hello, thanks for ur comment and advice. You can find my donation button in the sidebar now.
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.
Thx for your comment.Wish u good luck on ur work.
What’s up to every one, thee contents present at this
web page are truly remarkable for people knowledge, well, keep up thee nice work fellows.
Thx for your comment. I will keep it going.