Chrome 浏览器将会在2016年5月31 号切换协商协议,预计在Chrome 51 中移除对NPN的支持,仅支持ALPN。Chrome 51 禁用 NPN,旨在推动WEB的升级发展,但ALPN需要 OpenSSL 1.0.2支持,现实中OpenSSL 1.0.2普及率太低,可能会导致一大批不支持 ALPN 的HTTP/2 网站最终无法协商到 HTTP/2。 什么是NPN和ALPN NPN(Next Protocol Negotiation,下一代协议协商),是一个TLS 扩展,由 Google 在开发 SPDY 协议时提出,也就是服务端和浏览器之间用来决定使用 HTTP/1.1 还是最新的 HTTP/2 的协议。随着 SPDY 被 HTTP/2 取代,NPN 也被修订为 ALPN(Application Layer Protocol Negotiation,应用层协议协商)。二者的目标一致,都是用来在服务端和浏览器之间协商使用哪个 HTTP 版本,但实现细节不一样,相互无法兼容。 参考:谈谈HTTP/2的协议协商机制 为什么移除NPN会导致无法协商到HTTP/2? ·浏览器需借助HTTP/2协商协议机制,得知服务器是否支持HTTP/2。HTTP/2 Over TLS,可以使用TLS的NPN或ALPN扩展来完成协商; ·浏览器和服务端都支持NPN或ALPN协商,是用上 HTTP/2 的大前提; ·大部分 Web Server 都依赖 OpenSSL 库提供HTTPS服务,对于它们来说,是否支持NPN 或 ALPN完全取决于使用的 OpenSSL 版本; ·OpenSSL 1.0.2支持 ALPN,但在主流服务器操作系统中普及率太低。 升级建议 通过OpenSSL命令行工具,可以快速查看自己的HTTP/2 服务是否支持 ALPN 扩展: openssl s_client -alpn h2 -servername imququ.com -connect imququ.com:443 < /dev/null | grep 'ALPN' ·如果提示 unknown option -alpn,说明本地的 OpenSSL 版本太低(可通过 openssl version 查看),请升级到 1.0.2+。如果不方便升级,也可以使用SSLLabs在线工具测试。 ·如果结果包含 ALPN protocol: h2,说明服务端支持 ALPN,不受 Chrome 51 去掉 NPN 的影响。 ·如果结果包含 No ALPN negotiated,说明服务端不支持 ALPN,在 Chrome 51 中无法协商到 HTTP/2,需要尽快升级。 注意事项 ·由于OpenSSL 是系统基础库,大量其他软件都对它有依赖,如果直接升级系统自带的 OpenSSL,很容易引发各种问题。更为稳妥的做法是在编译 Web Server 时自己指定 OpenSSL 的位置。参考:Nginx 配置之完整篇 ·如果你在用 LibreSSL 做为 Web Server 的 SSL 库,需要升级到 2.1.3+ 才支持 ALPN。 参考来源: https://imququ.com/post/enable-alpn-asap.html https://ma.ttias.be/day-google-chrome-disables-http2-nearly-everyone-may-31st-2016/ http://www.zcfy.cc/article/288
|