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

时间:2016-05-12 08:40:37

标签: http2

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

4 个答案:

答案 0 :(得分:9)

以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 /..
  • ...

Client Hello

服务器响应SeverHello,该消息带有

enter image description here

结论

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

答案 1 :(得分:5)

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

答案 2 :(得分:2)

  

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

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

答案 3 :(得分:-3)

网站本身使用Go 1.6库。 Link
但其他方式也是可能的。
你应该看看:
https://godoc.org/golang.org/x/net/http2 对于一些基础教程,然后尝试学习一些关于API Headers等的内容,如果你对此感兴趣的话。