构建 HTTP 请求行的时候是怎么确定用什么版本的 HTTP 协议的?

Lenix at 
构建 HTTP 请求行的时候是怎么确定用什么版本的 HTTP 协议的?的配图
目前主流的 HTTP 协议版本有 HTTP/1.1、HTTP/2、HTTP/3(实验性)。请求发生时具体使用的版本是由客户端主导、客户端和服务器共同协商决定的。比如支持 HTTP/2 的客户端,会在 TLS 握手发起时,在 ALPN(Application-Layer Protocol Negotiation) 扩展中标明自己支持 h2 和 http/1.1,打开 curl 命令的调试模式就能看到:如果服务器也支持 h2,就会告诉客户端:不支持也同样会告诉:浏览器使用 HTTP/2 也是这个原理。但是 HTTP/3 使用了 UDP,UDP 不需要握手,所以没法用和 HTTP/2 相同的方式来进……