【问题标题】:How does a browser know if a site supports HTTP/2?浏览器如何知道网站是否支持 HTTP/2?
【发布时间】:2016-09-07 23:22:53
【问题描述】:

如果我输入https://http2.golang.org/,chrome 浏览器会自动发送 HTTP/2 请求。这是怎么做到的?

【问题讨论】:

标签: http2


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    字符串“h2”标识 HTTP/2 使用传输层 >Security (TLS) [TLS12] 的协议。 此标识符用于 TLS 应用层协议协商 (ALPN) >extension [TLS-ALPN] 字段以及标识 HTTP/2 over TLS 的任何地方。

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

    【讨论】:

      【解决方案3】:

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

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

      TLS 握手

      关于 step3 TLS 握手,@Oleg 有一个nice explanation

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

      客户端向服务器发送ClientHello,服务器携带了几样东西

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

      服务器响应SeverHello,携带

      结论

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

      【讨论】:

        猜你喜欢
        • 2021-07-31
        • 2023-03-30
        • 2019-06-03
        • 2019-10-11
        • 1970-01-01
        • 2013-01-01
        • 2011-10-13
        相关资源
        最近更新 更多