1. HTTP/2简介
HTTP/2
(超文本传输协议第2版,最初命名为 HTTP 2.0),是HTTP协议的的第二个主要版本,使用于万维网。HTTP/2
是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。它由互联网工程任务组 (IETF) 的 Hypertext Transfer Protocol Bis
(httpbis) 工作小组进行开发。该组织于2014年12月将 HTTP/2
标准提议递交至IESG进行讨论,于2015年2月17日被批准。HTTP/2
标准于2015年5月以 RFC 7540
正式发表。
2. HTTP/2特点
- 采用二进制格式传输数据,而非文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。
- 对消息头进行压缩传输,能够节省消息头占用的网络的流量,而
HTTP 1.1
每次请求,都会携带大量冗余头信息,浪费了很多带宽资源,头压缩能够很好的解决该问题。 - 多路复用,就是多个请求都是通过一个 TCP 连接并发完成,
HTTP 1.1
虽然通过pipeline
也能并发请求,但是多个请求之间的响应会被阻塞的,所以pipeline
至今也没有被普及应用,而HTTP/2
做到了真正的并发请求,同时流还支持优先级和流量控制。 - 服务器推送,服务端能够更快的把资源推送给客户端,例如服务端可以主动把
JS
和CSS
文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求,当客户端需要的时候,它已经在客户端了。
3. HTTP/2站点的优势
- 提升网站访问速度。
- 降低服务器压力。
- 部分替代异步加载的使用。
- 保护网站安全。
4. 硬核要求
- Nginx >1.9.5【nginx编译的时候需要指定新版本的openssl, –with-openssl=源码包解压目录】
- OpenSSL>1.0.2
- 因为
HTTP/2
不仅需要Web服务器还需要一个扩展支持,目前可以用的有ALPN
和NPN
两种(Chrome 已经移除了对NPN
的支持)。只有 OpenSSL 1.0.2 以上版本才开始支持ALPN
。 - 仅支持HTTPS
5. 在Nginx上启用HTTP/2
配置 Nginx 开启 HTTP/2
特别简单,在 server
配置段中的 listen
后增加 http2
即可
1 | vim /usr/local/nginx/conf/nginx.conf |
重启 Nginx 后,让配置生效。
1 | nginx -s reload |
6. 命令验证HTTP/2
升级curl
1 | 下载release |
vi /etc/yum.repos.d/city-fan.org.repo
1 | 将[city-fan.org]组的enable值改为1,保存 |
1 | yum install curl |
验证网站是否支持HTTP/2
1 | curl --http2 -I https://xxx.net |
web检测是否支持HTTP/2:
- KeyCDN: http2-test
- MySSL: http2_check
7. 浏览器支持
目前支持 HTTP/2 浏览器列表
Google Chrome、Mozilla Firefox、Microsoft Edge和Opera已支持HTTP/2,并默认启用。
Internet Explorer自IE 11开始支持HTTP/2,并预设激活
更详细的浏览器列表可参考:http://caniuse.com/#feat=http2
部分文章参考:运维之美
- 本文作者: GaryWu
- 本文链接: https://garywu520.github.io/2019/11/08/为https站点启用http2特性/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!