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

fen*_*gsp 19 http2

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

Rya*_* Lv 18

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

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

TLS握手

关于step3 TLS握手,@ Oleg 有一个很好的解释.

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

客户端发送ClientHello到服务器,其中包含多个内容

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

客户你好

服务器响应SeverHello,其中包含

在此输入图像描述

结论

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


Dhu*_*wal 5

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