为什么Chrome浏览器无法识别我的http2服务器?

6 google-chrome nginx http2

我根据Digital Ocean纸张设置了我的Nginx conf ,现在http2可用......

但在Chrome(版本54.0.2840.98(64位))开发工具中,它总是在HTTP 1/1上:

NAME             METHOD  STATUS  PROTOCOL
shell.js?v=xx..    GET    200     http/1/1
Run Code Online (Sandbox Code Playgroud)

我的服务器正在运行Ubuntu 16.04 LTS,它支持ALPN和NPN,随附的openssl版本是1.0.2g

我用这个工具站点检查了http2支持,结果是:

Yeah! example.com supports HTTP/2.0. ALPN supported...
Run Code Online (Sandbox Code Playgroud)

也可以用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
Run Code Online (Sandbox Code Playgroud)

我还从我的控制台检查了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
Run Code Online (Sandbox Code Playgroud)

为什么Chrome会落后呢?如何使用Safari(v 10.0.1)进行检查

Bar*_*ard 20

可能是以下两个原因之一:

  1. 您使用的是防病毒软件,MITM是您的流量,因此将您降级为HTTP/1.1.关闭AV上的https流量监控以直接连接到服务器.您可以使用在线工具测试您的站点是否支持HTTP/2,从而检查是否是这种情况.

  2. 您正在使用较旧的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支持,因此跳过了这个答案.

  • 我也可以确认这可能是由反病毒软件引起的.在我的情况下,它引起了这个问题.禁用"Web访问保护" - >"Web协议"下的"启用HTTPS检查"允许http/2工作(遗憾的是,将地址添加到其白名单似乎无法解决问题). (3认同)