HTTP1.1到HTTP / 2:标头呢?

Dea*_*ler 3 http http2

在HTTP 1.1中,状态行为

scheme/version code reason
HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)

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

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

method uri scheme/version
POST http://myhost.com HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

我看到了:method和我看到的:path,我认为这只是一个相对路径,与完整的绝对路径不同(并且由于Chrome和Firefox将HTTPS推送为HTTP / 2,所以这可能是有道理的)。我没有看到版本头。

有版本标头吗?还是在协议决定之前就已经知道了这一点,因此并不需要它?

那原因码呢?是否假设这些参数非常恒定以至于消失(我在这里猜测)?

sbo*_*det 5

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

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

使用HTTP / 2,可以协商协议版本。

在明文HTTP / 2中,Upgrade标头报告h2c,其中2表示协议的版本2。我想对于HTTP / 3,令牌将更改为h3c。对于加密的HTTP / 2,令牌h2通过ALPN协商也类似。

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

由于这些原因,HTTP / 2既没有版本也没有理由伪头。