【发布时间】:2016-09-07 23:22:53
【问题描述】:
如果我输入https://http2.golang.org/,chrome 浏览器会自动发送 HTTP/2 请求。这是怎么做到的?
【问题讨论】:
-
在 RFC 中有一个很好的解释这是如何工作的:tools.ietf.org/html/rfc7540#section-3.2
标签: http2
如果我输入https://http2.golang.org/,chrome 浏览器会自动发送 HTTP/2 请求。这是怎么做到的?
【问题讨论】:
标签: http2
chrome 浏览器只会向网站发送 HTTP/1.1 请求。由于网站启用了 HTTP/2,它会向浏览器发送一条消息,表明它支持 HTTP/2。如果服务器发现浏览器能够识别 HTTP/2,则将它与服务器之间的通信协议升级为 HTTP/2。 因此,通常是服务器将请求转换为 HTTP/2 连接。浏览器只是符合服务器的升级策略。 只有在服务器升级通信协议后,chrome浏览器才会显示你与服务器或网站有HTTP/2连接。
【讨论】:
字符串“h2”标识 HTTP/2 使用传输层 >Security (TLS) [TLS12] 的协议。 此标识符用于 TLS 应用层协议协商 (ALPN) >extension [TLS-ALPN] 字段以及标识 HTTP/2 over TLS 的任何地方。
如果服务器支持http2.0,浏览器会在TLS应用层协议协商中发现服务器支持http2.0。 refer link!
【讨论】:
以stackoverflow为例,当浏览器向stackoverflow.com发送请求时,需要做以下步骤:
关于 step3 TLS 握手,@Oleg 有一个nice explanation。
为了检查 TCP/IP 数据包的细节,您可能需要使用一些工具来捕获数据包。例如Wireshark.
ClientHello,服务器携带了几样东西SeverHello,携带HTTP/2
HTTP2 请求/响应发生在第 4 步。在此之前,浏览器已经通过 TLS 握手知道服务器是否支持 HTTP/2。
【讨论】: