http/2起飞
第一次听到http/2这个词,是在一些技术社区里大佬闲暇谈资时提起的,当时以为是不是啥类似protobuf协议的东西,后来了解后发现是我想偏了😄。 http/2从字面上看也是和http协议相关的,只是http/1的升级版。http/2协议标准于2015年正式发布,该标准协议有Chrome, Opera, Firefox, Safari, Edge等主流大厂共同制定, 所以http/2的市场支持是相当可以的。截至2019年6月,全球有36.5%的网站都支持了http/2。为此还下了个chrome检测http/2的扩展,打开网站只要是支持了http/2这个小插件就亮了。 不装不知道,一装发现很多国内网站都支持了http/2。
那么这么多网站都支持,我也要尝试下了,不然感觉就不时髦了。
由于我的大部分服务器都是采用的nginx,这里就说一下通过nginx升级到http/2。
首先nginx支持http/2的话最低配需要的是1.10.0和openssl的1.0.2版本,同时http/2在实现上只支持https。
也就是说你想http/2起飞的话,需要满足三个条件,
1.nginx版本大于等于1.10.0
2.openssl版本大于等于1.0.2
3.需要支持https,有https证书
我有https证书,这点满足了,然后是我nginx -V
打印了下看看我的nginx版本,版本也同样满足了,我笑了,这么顺利!! 但是没想到有另外的问题,也是我之前在编译nginx时没想到的,就是你在编译nginx时需要带上http/2的模块,--with-http_v2_module
,不然nginx也是没法支持的。
事到如此只能是重新编译nginx了,从nginx官网下载重新的源码包,解压后配置编译,
./configure
后面的配置可以根据自己的nginx -V
看到原来的配置继续配上,然后再加上最重要的配置--with-http_v2_module
,
这样配置完,编译后的nginx就可以支持http/2了。
下面就是配置你需要支持http/2的站点了,找到你网站的配置文件/usrl/local/nginx/conf/vhost/xxx.conf
,在listen
处加上http2
就OK了。具体像这样,
改变前:listen 443 ssl;
改变后:listen 443 ssl http2;
最后我们需要需要重启nginx,是真的重启,需要stop再start。或者你也可以kill -9 xxx暴力的方式。
最后的效果就是这样了
感觉上是快了不少的。
http/2的优势
- 多路复用,用同一个连接传输多个资源,比如以前你经常用的合并压缩js,css的方式,以及把很多小图变成一张大图。这些在http/2里直接不需要了,都帮你处理好了。
- Server Push,http2可以让服务先把其它很可能客户端会请求的资源先push发给你,不用等到请求的时候再发送,这样可以提高页面整体的加载速度。
- 报文头压缩和二进制编码,意思就是优化客户端的发送请求,过滤重复报文,减少发送量提高发送速度,而且节省了流量。