HTTP/2 升级
2017-01-08 09:07
246 查看
http2目前已经发布了大半年,最近也已经将公司的服务器从http1.x升级到http2,现在将在研究和升级http2一些经验整理如下,以备不时之需。 http2是基于Google的spdy协议进行编写的,与spdy区别的地方在于他们cipher的协商方式的不同,http2是基于ALPN(Application Layer Protocol Negotiation),而spdy是基于NPN(Next Protocol Negotiation),alpn与npn最大的区别在于alpn是客户端提供ciphers,服务器会根据客户端提供的ciphers来决定使用哪一个ciphers,而NPN与之恰恰相反。由于客户端提供ciphers,服务端可以从客户端所提供的ciphers中挑选出来一个支持的,安全性比较高的ciphers。 http2和http1.x之间的区别在于,http2为二进制的传输协议,同时它的表现方式有点类似于tcp的长连接,在client与server建立连接的时候,只会建立一个连接,而且所有的数据都会通过这个连接进行传递,http2目前仅支持https,虽然在http2的rfc文档中提供了h2和h2c两种,但是各大厂目前却都只实现了h2,h2c虽然也可以在一些开源库中找到(如nghttp2),但是能用https还是用https吧,就酱。
http2升级准备
鉴于我们所使用的web服务器为nginx,对nginx作了比较多的了解,nginx1.9.5+即可支持http2,在编译nginx的时候,需要加上`--with-http_v2_module`,同时需要确认openssl的版本是要大于`1.0.2g`,这些信息可以通过`nginx -V`所打印出来的信息中得知。目前为止,nginx仍不支持http2的server push功能,其他的基础功能支持尚好。 更新nginx的配置文件中的ssl相关选项可以使用[mozilla][1]提供的ssl配置生成器所生成的文件,升级过程中,一些被废弃的ssl_ciphers如果在ssl握手的时候被选中,可能会出现协商失败的问题。因为http2数据传输前需要经历tcp连接,alpn协商,ssl协商,如果alpn协商的结果为h2,而ssl协商的cipher为http2的black list中的一员,浏览器就会死给你看,无法显示正确的内容。
相关文章推荐
- 升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980)
- 升级NGINX支持HTTP/2服务端推送
- HTTP 升级到 HTTPS 基础知识详解
- HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
- Chrome断点续传控件升级日志-Xproer.HttpUploader5
- 升级iOS10后http网页定位失效解决方案
- 升级到iOS5后ASIHttpRequest库问题及解决方法
- HttpClient4.X 升级 入门 + http连接池使用
- HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
- 升级到iOS5后ASIHttpRequest库问题及解决方法
- 使用 Cerbot 部署 Let's Encrypt免费证书 简单 升级 http 到 https 申请单域名ssl证书
- 升级MYSQL【转】作/译者:叶金荣 来源:http://imysql.cn
- HttpClient_3 升级到 HttpClient_4
- HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
- 通用HTTP升级程序
- [C#HttpHelper]类1.4正式版教程与升级报告
- HttpClient_4 用法 由HttpClient_3 升级到 HttpClient_4 必看
- 表格定义具有无法升级的无效目标命名空间'http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition'
- Apache HTTP Server 安装及升级指引
- 报表定义无效。详细信息: 报表定义具有无法升级的无效目标命名空间“http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefi