HTTP2:如何表明对它的支持?是否有HTTP2的"备用协议"?

Flo*_*der 3 http2

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

我全部换成listen spdylisten http2,去除spdy_headers_comp指令也删除add_header Alternate-Protocol 443:npn-spdy/3;

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

但是Firefox如何知道我的网站支持HTTP2?在尝试HTTP1.1之前,它是否始终首先尝试通过HTTP2连接?

sbo*_*det 5

HTTP/2站点通过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.

  • 服务器使用"备用协议"来告诉客户端他们可以使用给定的协议连接_directly_.您的示例只是说Google服务器通过NPN(ALPN的前身)支持SPDY/3(HTTP/2的前身).例如,HTTP/1.1服务器可以使用`Alternate-Protocol:8443:h2`来回复,告诉客户端在不使用ALPN的情况下连接到_different_端口(8443),知道在该端口后面有HTTP/2服务器.如果没有此标头,客户端将无法知道在端口8443上要说什么协议.对于支持ALPN的服务器,"备用协议"只是提供信息. (2认同)