最新消息:

HTTP2简介和nginx中开启HTTP2

IT技术 ipcpu 918浏览

HTTP2简介和nginx中开启HTTP2.md

一、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 正式发表。

二、HTTP/2优点

采用二进制格式传输数据,而非文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。

对消息头进行压缩传输,能够节省消息头占用的网络的流量,而 HTTP 1.1 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源,头压缩能够很好的解决该问题。

多路复用,就是多个请求都是通过一个 TCP 连接并发完成, HTTP 1.1 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求,同时流还支持优先级和流量控制。

服务器推送,服务端能够更快的把资源推送给客户端,例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求,当客户端需要的时候,它已经在客户端了。

三、HTTP/2站点的优势

提升网站访问速度。
降低服务器压力。
部分替代异步加载的使用。
保护网站安全。

四、为什么不是HTTP/1.2

为了实现 HTTP 工作组设定的性能目标,HTTP/2 引入了一个新的二进制分帧层,该层无法与之前的 HTTP/1.x 服务器和客户端向后兼容,因此协议的主版本提升到 HTTP/2。

五、在Nginx上启用HTTP/2

在 Nginx 上 开启 HTTP/2 需要 Nginx 1.9.5 以上版本,并且需要 OpenSSL 版本在 1.0.2 以上。

因为 HTTP/2 不仅需要Web服务器还需要一个扩展支持,目前可以用的有 ALPN 和 NPN 两种(Chrome 已经移除了对 NPN 的支持)。只有 OpenSSL 1.0.2 以上版本才开始支持 ALPN 。

从Nginx 1.9.5 开始,http_v2_module 已经替换了ngx_http_spdy_module,全面支持HTTP/2协议。默认没有放进编译参数,需要编译参数–with-http_v2_module开启。

可以用nginx -V查看。

[root@nginx ~]# nginx -V
nginx version: nginx/1.12.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx  <…省略…> --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module  <…省略…>

确保支持http2后,nginx配置作如下修改,

server {
listen 443 ssl http2 ;
server_name www.ipcpu.com;

六、HTTP2检测

Chrome有个插件 HTTP/2 and SPDY indicator ,如果地址栏出现蓝色的闪电就是 h2
也可以在 chrome://net-internals/#http2 中检查

如下图

七、浏览器支持

开启了 HTTP/2 以后,低版本浏览器也是可正常访问的。如果客户端不支持 HTTP/2 Nginx 会自动向下兼容 HTTP 1.1。

目前支持 HTTP/2 浏览器列表

八、HTTP/2的移动端现状

苹果从iOS9开始支持HTTP/2,对iOS开发人员来说,即是iOS9开始,NSURLSession可以支持HTTP/2。

苹果已经打算废弃NSURLConnection,所以NSURLConnection不能支持HTTP/2。

android原生HttpURLConnection并不支持HTTP/2,可以选用三方开源库okhttp作为网络框架

android 5.0+设备才支持HTTP/2

九、参考资料

http://caniuse.com/#feat=http2
https://www.hi-linux.com/posts/24162.html
https://segmentfault.com/a/1190000004399183

转载请注明:IPCPU-网络之路 » HTTP2简介和nginx中开启HTTP2