一个浏览器如何知道一个网站是否支持HTTP/2?

38

1
在RFC中有一个相当好的解释,说明了这是如何工作的:https://tools.ietf.org/html/rfc7540#section-3.2 - hansaplast
3个回答

45

以stackoverflow为例,当浏览器向stackoverflow.com发送请求时,需要执行以下步骤:

  1. DNS查找,查找stackoverflow的IP地址。
  2. TCP/IP握手。
  3. TLS握手。
  4. HTTP请求/响应(应用程序协议)。
  5. ....

TLS握手

关于第3步TLS握手,@Oleg提供了一个不错的解释

为了检查TCP/IP数据包的详细信息,您可能需要使用一些工具来捕获数据包。例如:Wireshark

客户端向服务器发送ClientHello,其中携带以下几个信息

  • 支持的密码套件。您喜欢哪些密码套件?
  • 支持的TLS版本。
  • 一个随机数。
  • 支持的应用程序协议。例如HTTP/2、HTTP 1.1/ Spdy/..
  • ...

客户端Hello

服务器响应SeverHello,其中携带以下信息

输入图像说明

结论

步骤4中发生HTTP2请求/响应。在此之前,浏览器已经通过TLS握手知道服务器是否支持HTTP/2。


6
谷歌浏览器只会向网站发送HTTP/1.1请求。当网站启用HTTP/2时,它将向浏览器发送一条消息表示支持HTTP/2。如果服务器发现浏览器能够识别HTTP/2,则升级与服务器之间的通信协议为HTTP/2。 因此,通常是服务器将请求转换为HTTP/2连接。浏览器只需遵守服务器的升级策略即可。 仅在服务器升级通信协议后,谷歌浏览器才会显示您与服务器或网站建立了HTTP/2连接。

2
字符串"h2"代表了HTTP/2协议使用的传输层安全性(TLS)[TLS12]。在TLS应用层协议协商(ALPN)[TLS-ALPN]扩展字段中使用此标识符,在任何标识HTTP/2 over TLS的地方也会使用它。
如果服务器支持HTTP/2.0,则浏览器将在TLS应用层协议协商中发现该服务器支持HTTP/2.0。详见此链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接