所以我刚升级到支持HTTP2的nginx 1.9.5。
我用 listen http2
替换了所有 listen spdy
,删除了 spdy_headers_comp
指令,还删除了 add_header Alternate-Protocol 443:npn- spdy/3;
然后我在 Firefox 中打开我的站点,打开网络监视器,瞧:版本:HTTP/2.0
但是 Firefox 如何知道我的站点支持 HTTP2?在尝试 HTTP1.1 之前,是否总是首先尝试通过 HTTP2 进行连接?
最佳答案
浏览器使用名为 ALPN 的 TLS 扩展告诉服务器他们可以使用什么协议(protocol)。 浏览器始终发送此 TLS 扩展,并且始终包括 HTTP/2 和 HTTP/1.1(并且可能还包括旧的 SPDY 协议(protocol))。
服务器接收浏览器可以使用的协议(protocol)列表,如果服务器支持 HTTP/2(并且如果满足许多其他条件——特别是关于 TLS 协议(protocol)版本和密码套件),服务器决定与浏览器对话 HTTP/2,并将选择的协议(protocol)发送回浏览器,再次使用 ALPN 扩展。
如果服务器不支持 HTTP/2,那么它将通过 ALPN 扩展发送给浏览器它只能使用 HTTP/1.1。
如果服务器不支持 ALPN 扩展,则它不会将其发送到浏览器,浏览器将默认与该服务器通信 HTTP/1.1。
关于HTTP2:如何表示支持? HTTP2 有 "Alternate-Protocol"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721969/