HTTP1.1 到 HTTP/2:headers 呢?

HTTP1.1 to HTTP/2: what about headers?

在 HTTP 1.1 中,状态行是

scheme/version code reason
HTTP/1.1 200 OK

我在 HPACK 规范中看到了 :scheme 和 :status headers。但是我没有看到任何版本或原因?没有一个吗?

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

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

我看到了 :method 和 :path,我认为它只是一个相对路径,它与完整的绝对路径不同(并且因为 Chrome 和 Firefox 正在为 HTTP/2,这可能是有道理的)。不过我没有看到版本 header。

有版本header吗?还是在协议决定之前总是知道这并不真正需要?

原因代码呢?是否假设这些是相当恒定的,所以消失了(我在这里猜测)?

在 HTTP/1 中,需要版本标记来区分 HTTP/1.0 和 HTTP/1.1,因为它们具有相同的线路表示,但支持不同的功能。

例如,客户端声明 HTTP/1.1 隐式地告诉服务器它支持持久连接和内容分块。

使用HTTP/2,协议版本已协商

在 clear-text HTTP/2 中,Upgrade header 报告 h2c,其中 2 表示协议的版本 2。我想对于 HTTP/3,令牌将更改为 h3c。 加密的 HTTP/2 也会发生类似情况,其中令牌 h2 是通过 ALPN 协商的。

原因消息已被删除,因为它是多余的,因为状态代码已经传达了所有必要的信息(更不用说它们可能是攻击媒介)。

由于这些原因,HTTP/2 既没有版本也没有原因 pseudo-headers。