Http2 浏览器如何知道站点是否支持HTTP/2?

Http2 浏览器如何知道站点是否支持HTTP/2?,http2,Http2,如果我输入,chrome浏览器将自动发送HTTP/2请求。这是如何做到的?chrome浏览器只会向网站发送HTTP/1.1请求。由于该网站启用了HTTP/2,它将向浏览器发送一条消息,表明它支持HTTP/2。如果发现浏览器能够识别HTTP/2,则服务器会将其与服务器之间的通信协议升级为HTTP/2。 因此,通常是服务器将请求转换为HTTP/2连接。浏览器仅符合服务器的升级策略。 只有在服务器升级通信协议后,chrome浏览器才会显示您与服务器或网站建立了HTTP/2连接 字符串“h2”标识HTT

如果我输入,chrome浏览器将自动发送HTTP/2请求。这是如何做到的?

chrome浏览器只会向网站发送HTTP/1.1请求。由于该网站启用了HTTP/2,它将向浏览器发送一条消息,表明它支持HTTP/2。如果发现浏览器能够识别HTTP/2,则服务器会将其与服务器之间的通信协议升级为HTTP/2。 因此,通常是服务器将请求转换为HTTP/2连接。浏览器仅符合服务器的升级策略。 只有在服务器升级通信协议后,chrome浏览器才会显示您与服务器或网站建立了HTTP/2连接

字符串“h2”标识HTTP/2使用传输层>安全性(TLS)[TLS12]的协议。 此标识符用于TLS应用层协议协商(ALPN)>扩展[TLS-ALPN]字段中,以及在识别TLS上的HTTP/2的任何位置

如果服务器支持http2.0,浏览器将发现服务器在TLS应用层协议协商中支持http2.0。
!

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

  • DNS查找。查找stackoverflow的ip地址
  • TCP/IP握手
  • TLS握手
  • HTTP请求/响应(应用程序协议)
  • TLS握手 关于步骤3 TLS握手,有一个由@Oleg编写的示例

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

    客户机将
    ClientHello
    发送到服务器,该服务器承载多个内容
    • 支持的密码套件。你喜欢哪一套
    • 支持的TLS版本
    • 随机数
    • 支持的应用程序协议。e、 g.HTTP/2,HTTP 1.1/Spdy/。

    服务器响应SeverHello,它携带
    • 选择密码套件
    • 选择TLS版本
    • 随机产生的数字
    • 以及,在中选择的应用程序协议,例如
      HTTP/2

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

    在RFC中有一个很好的解释: