所以我刚刚升级到支持HTTP2的nginx 1.9.5。
我已将所有listen spdy
替换为listen http2
,删除了spdy_headers_comp
指令并删除了add_header Alternate-Protocol 443:npn-spdy/3;
然后我在Firefox中打开了我的网站,打开了网络监视器,瞧瞧:Version: HTTP/2.0
但Firefox如何知道我的网站支持HTTP2?在尝试HTTP1.1之前,它是否始终首先尝试通过HTTP2连接?
答案 0 :(得分:5)
浏览器使用名为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。