如果我输入https://http2.golang.org/,Chrome浏览器会自动发送HTTP / 2请求。这是怎么做到的?
答案 0 :(得分:9)
以stackoverflow为例,当浏览器向stackoverflow.com
发送请求时,它必须执行以下步骤:
关于step3 TLS握手,@ Oleg提供了一个nice explanation。
为了检查TCP / IP数据包的详细信息,可能需要使用一些工具来捕获数据包。例如Wireshark。
ClientHello
发送到服务器,该服务器会承载几件事SeverHello
,该消息带有HTTP/2
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等的内容,如果你对此感兴趣的话。