http2升级过程
更新于 阅读 2 次
http2升级过程
Http2要求nginx版本在1.9.5以上才支持**--with-http_v2_module**模块,同时需要配合https使用
- 使用
nginx -v
查看是否支持模块
--with-http_v2_module
- 修改nginx配置
listen 443 ssl http2; listen [::]:443 ssl http2;
- 重启nginx
service nginx restart
这时可以在浏览器访问页面,打开开发者工具,选择network,查看Protocol是否为h2。
http2介绍
-
帧:最小的传输单元、乱序(在客户端按照首部的标记拼接起来)
-
消息: 由多个帧组合起来
-
多路复用:浏览器在多请求并发时对同一个域名由连接数限制,一般在http/1个,所以http/1在并发时会被挂起一段时间,http/2所有的请求都在一个链接上,减少了延迟和内存消耗
-
优先级:http/2每个请求都可以携带一个31bit的优先值,为0时优先级最高,数值越大优先级越低。根据优先级客户端和服务器就可以对不同的流采取不同的策略,以最优的方式发送流、消息和帧。
-
服务器推送:
- 服务器可以主动推送资源
- 推送的资源有自己独立的URL,可以缓存,可以被多页面共享
- 资源遵守同源策略,不可以推送第三方资源
- 客户端可以拒绝推送的资源
给基于以上特征:
- 客户端可以在http头部中列出哪些资源需要被推送,
- 服务器根据请求的html,推测出客户端接下来需要哪些资源
-
头部压缩:
- http/2通过"首部表"来跟踪和存储之前发送的键—值对,对于相同的键—值对,不再通过每次请求和响应发送
- “首部表”存在于连接的存续期内,由客户端和服务器共同维持
- 对于新的键—值对,要么添加到表的末尾,要么更新
-
ALPN:应用层协商协议
客户端、服务器需要升级才能使用http/2,在此过程中必然存在http/2、http/1共同存在的情况,端口都是80,这是就需要通过应用层协商协议:
- 客户端发起的请求,如果是http/2,会带有upgrade头部
- 如果服务器不支持,拒绝升级协议,使用http1.1返回
- 服务器支持,接受升级,切换到新分帧,使用http/2通信