HTTP1.1升级到HTTP/2,关于头部信息有什么变化?

3
HTTP1.1 中,状态行是:
scheme/version code reason
HTTP/1.1 200 OK

我看到HPACK规范中有:scheme和:status头,但是没有版本或原因的相关内容?难道没有吗?

在HTTP 1.1的请求中,请求行是:

method uri scheme/version
POST http://myhost.com HTTP/1.1

我看到了 :method 和 :path,我认为这只是一个相对路径,并不同于完整的绝对路径(由于 Chrome 和 Firefox 正在推动 HTTPS 代替 HTTP/2,这可能是有道理的)。但我没有看到版本标头。
是否存在版本标头?还是说在协议决策之前这些信息已经被知晓,因此实际上并不需要版本标头?
那么关于原因代码呢?它们被认为是相当恒定的,因此不再需要(这是我的猜测)?

1
根据HTTP/2 RFC的规定:“在下一跳不支持HTTP/2的情况下,客户端请求“http” URI时使用HTTP升级机制”。我认为如果客户端已经知道服务器支持HTTP/2,则可以最初使用版本HTTP/2.0。此外,这篇介绍HTTP2的指南中的Listing 9将版本设置为HTTP/2.0 - Roman Vottner
2
HTTP/2只是2,没有“2.0”。 - Daniel Stenberg
1个回答

6
在HTTP/1中,版本标记是必需的,以区分HTTP/1.0和HTTP/1.1,因为它们具有相同的传输表示,但支持不同的功能。
例如,客户端声明HTTP/1.1隐含地告诉服务器它支持持久连接和内容分块。
在HTTP/2中,协议版本是“协商”的。
在明文HTTP/2中,“升级”头报告“h2c”,其中“2”表示协议的第二个版本。我想对于HTTP/3,令牌将更改为“h3c”。
对于加密的HTTP/2,通过ALPN协商令牌“h2”。
原因消息已被删除,因为状态代码已经传达了所有必要的信息(更不用说它们可能是攻击向量)。
出于这些原因,HTTP/2没有版本或原因伪标题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接