HTTP2:如何表示支持? HTTP2 有 "Alternate-Protocol" 吗?

HTTP2: How to indicate support for it? Is there a "Alternate-Protocol" for HTTP2?

所以我刚升级到支持HTTP2的nginx 1.9.5。

我用 listen http2 替换了所有 listen spdy,删除了 spdy_headers_comp 指令,还删除了 add_header Alternate-Protocol 443:npn-spdy/3;

然后我在 Firefox 中打开我的站点,打开网络监视器,瞧:Version: HTTP/2.0

但是 Firefox 如何知道我的站点支持 HTTP2?在尝试 HTTP1.1 之前是否总是先尝试通过 HTTP2 连接?

HTTP/2 sites are deployed over TLS.

浏览器使用名为 ALPN 的 TLS 扩展来告诉服务器它们可以使用哪些协议。 浏览器始终发送此 TLS 扩展,并且始终包括 HTTP/2 和 HTTP/1.1(并且可能还包括旧的 SPDY 协议)。

服务器接收浏览器可以使用的协议列表,如果服务器支持HTTP/2(并且满足其他一些条件——特别是关于 TLS 协议版本和密码套件) ,服务器决定与浏览器对话 HTTP/2,并将选择的协议发送回浏览器,再次使用 ALPN 扩展。

如果服务器不支持HTTP/2那么它会通过ALPN扩展发送给浏览器它只能说HTTP/1.1。

如果服务器不支持ALPN扩展,那么它不会发送给浏览器,浏览器会默认说HTTP/1.1给那个服务器。