Http2基础及本地环境搭建

Http/2,超文本传输协议第二版,最初命名为http2.0,是http协议的第二个版本,使用于万维网。
它是HTTP协议自1999年HTTP 1.1发布后的首个更新,主要基于SPDY协议。
随着http2的标准的确定,各大浏览器的大力支持,http2这个字眼开始出现在我们的视野里。
为什么要使用http2呢,它和之前的http有什么区别?

相对于http1.1的优点

1
2
3
4
5
6
7
8
1.多路复用、请求优化:一个连接内可以有无限个并行的请求即允许多个并行的http请求共用一个tpc连接。
多路复用还可以设置优先级,让重要的资源先行。

2.压缩了 HTTP 头:多个请求

3.支持服务器推送:可以将一些资源直接通过服务器推送到用户端,减少请求次数。

4.强制使用SSL传输协议

Http2的安装注意事项

1
2
3
4
5
6
7
8
9
1.Http2是基于https的,因此,在使用Http2之前,首先需要弄好https,也就是需要申请网站证书。
我这里用的是腾讯云的主机、腾讯云的域名、腾讯云的证书(买域名免费用,文章后面有传送门,https证书的申请、证书的安装)。

2.需要Nginx版本1.9.5及以上。
从最新发布的 Nginx 1.9.5 开始,httpv2module 已经替换了 ngxhttpspdy_module 并正式开始提供全面的 HTTP/2 支持。

3.openssl版本1.0.2及以上。
Http2 需要扩展支持,可以用的有 ALPN 和 NPN 两种(Chrome 已经移除了对 NPN 的支持)
为了使用 ALPN 需要将 OpenSSL 升级到 1.0.2 以上版本。

ps:
本人就是卡在这里卡了几天,折腾了好久最终重装了ubuntu系统 Ubuntu Server 16.04.1。
因为,Ubuntu 16.04 LTS 1.0.2g,之前的版本自带的openssl都不支持http2
当然爱折腾的也可以在不升级系统的情况下,自己安装新的openssl、然后进行一系列的重新编译nginx

查看nginx和openssl版本

1
2
3
openssl version # LibreSSL 2.2.7
nginx -v # nginx version: nginx/1.10.1
nginx -V # 同上

http2配置

在上面https的配置里面找到之前配置443的地方,加上一个http2就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443 http2;
server_name localhost;
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}

至此,正http2环境已经搭建完成,刷新页面,就可以看见网站的请求已经变成了http2了

eg:https://www.epoos.com/

相关链接

caniuse http2的兼容性
https证书申请
https证书安装
Supporting HTTP/2