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给那个服务器。
所以我刚升级到支持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给那个服务器。