Web性能优化:升级HTTP/2

HTTP/2时代已经开启,不管是在HTTP1.X上苦苦做性能优化的你,还是没怎么做性能优化的你,都得该考虑升级HTTP/2了。因为HTTP/2的目的就是通过多路复用来减少延迟,通过头部压缩减少开销,同时增加对请求优先级和服务器端推送的支持。HTTP/2还带来其他协议层面的辅助实现,比如新的流量控制、错误处理和更新机制。所以我们应该在应用中好好利用它。从2015发布至今,一些Web服务器和多数的浏览器也都已经兼容HTTP/2。移动端Android5.0+、iOS9.0+开始兼容。

我们的Web服务器使用的是NginX,下面就参考NginX的白皮书《HTTP/2 for Web Application Developers》对NginX的HTTP/2升级做下实践介绍。

如下示意图,NginX与客户端建立的HTTP/2连接,与应用服务器可继续保持HTTP1.X连接。所以,HTTP/2可以分阶段升级,当前先支持客户端到Web服务器的连接,后续再升级Web服务器到应用服务器的连接(tomcat9开始支持HTTP/2,目前发布了beta版本)。

升级只需以下几步:

启用SSL

HTTP/2本身是不强制SSL的,但浏览器是要求的,所以需要先支持HTTPS访问。且站点全覆盖HTTPS也是大家已达成的共识,所以我们早早升级过,没升级的朋友先去支持HTTPS吧。这步我们就直接跳过了:)

升级OpenSSL到1.0.2或以上版本

(1)下载OpenSSL

地址:https://www.openssl.org/source/

(2)解压

tar –zxvf openssl-1.0.2n.tar.gz

(3)配置NginX

./configure --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-openssl=/解压目录/openssl-1.0.2n

(4)编译&安装

make && make install

(5)开启HTTP/2

server配置增加http2参数

server {

listen 443 sslhttp2default_server;

ssl_certificate server.crt;

ssl_certificate_key server.key;

}

(6)重启NginX

# nginx -s reload

(7)验证

升级前后访问对比

升级前访问图示

升级后访问图示

会发现连接数骤减,Protocol变成了h2。连接数的减少表明节省了多次连接的握手时间,降低了服务器的连接数损耗。

你可能会问不支持HTTP/2的客户端怎么办?请放心,HTTP/2是向前兼容的,不支持的HTTP/2继续用HTTP1.X协议访问即可。

去掉HTTP1.1的优化项

域名分区、文件拼接、图片精灵、内嵌文件等都要去掉,在HTTP/2下都是反模式并降低了性能。

到此完成现阶段的HTTP/2升级,大家可以动手尝试操作了。

关于HTTP/2协议

详细内容可以阅读百度开源的“HTTP2中英对照版”。

这里列下所增加的5个重要特性来吸引下大家:)

单一持久连接:一个网页只用一个连接

多路复用:请求和答复的消息帧在同一个连接上传输,解决了队首阻塞问题。

头部压缩和二进制分帧:头部可只推送差异数据;消息分解为互不依赖的二进制帧。

请求优先级:决定交付次序。

SSL加密:支持SSL,性能基本无损耗且更安全。

关于Web性能优化

难道升级了HTTP/2协议后就不用做性能优化了吗(黑人问号脸)?当然不是,HTTP/2的传输层仍然是TCP,所以对TCP的优化仍需继续。另外只要通过网络传输,追求传输内容的“少”和“小”就不能回避。

看下我们在《Web性能权威指南》所抽取HTTP的脑图或许更清晰,Web性能要点仍是持续关注的方面。对于性能的追求,只能是未完待续....

引用:

《HTTP/2 for Web Application Developers》

https://www.nginx.com/wp-content/uploads/2015/09/NGINX_HTTP2_White_Paper_v4.pdf

《Web性能权威指南》[美]Ilya Grigorik 著 李松峰 译

“HTTP2中英对照版”

https://github.com/fex-team/http2-spec

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113G02XVI00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券