我按照以下方式设置 Nginx 配置 数字海洋论文,现在 http2 已经可用……
但在 Chrome (版本 54.0.2840.98 (64 位)) 开发工具中,它始终处于 HTTP 1/1 上:
NAME METHOD STATUS PROTOCOL
shell.js?v=xx.. GET 200 http/1.1
我的服务器运行的是 Ubuntu 16.04 LTS,它支持 ALPN 和 NPN,随附的 openssl 版本是 1.0.2g
我检查了 http2 支持这个工具站点结果是:
Yeah! example.com supports HTTP/2.0. ALPN supported...
另外使用 curl 检查一下也是可以的
$ curl -I --http2 https://www.example.com
HTTP/2 200
server: nginx/1.10.0 (Ubuntu)
date: Tue, 13 Dec 2016 15:59:13 GMT
content-type: text/html; charset=utf-8
content-length: 5603
x-powered-by: Express
cache-control: public, max-age=0
etag: W/"15e3-EUyjnNnyevoQO+tRlVVZxg"
vary: Accept-Encoding
strict-transport-security: max-age=63072000; includeSubdomains
x-frame-options: DENY
x-content-type-options: nosniff
我还从控制台使用 is-http2 cli 进行了检查
is-http2 www.amazon.com
× HTTP/2 not supported by www.amazon.com
Supported protocols: http/1.1
is-http2 www.example.com
✓ HTTP/2 supported by www.example.com
Supported protocols: h2 http/1.1
使用我的本地主机上的 openssl 进行测试
$ echo | openssl s_client -alpn h2 -connect www.example.com:443 | grep ALPN
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = example.com
verify return:1
ALPN protocol: h2
DONE
为什么 Chrome 落后了?我如何才能使用 Safari (v 10.0.1) 进行检查?
答案1
根据我的回答堆栈溢出:
可能是以下两个原因之一:
您正在使用防病毒软件,它会对您的流量进行 MITM 攻击,因此会将您降级到 HTTP/1.1。关闭 AV 上的 https 流量监控以直接连接到服务器。
您正在使用较旧的 TLS 密码,特别是 Chrome 不允许用于 HTTP/2 的密码(https://http2.github.io/http2-spec/#BadCipherSuites)按照上述指南的第 5 步操作。使用以下工具扫描您的网站https://www.ssllabs.com/ssltest/检查您的 TLS 配置并改进它。
第三个原因是SSL/TLS 库缺少 ALPN 支持(例如,您正在使用 openssl 1.0.1 并且需要是 1.0.2 或更高版本)但您已经确认您有 ALPN 支持,因此跳过此答案。