为什么在请求行和状态行中都显示HTTP版本号?

时间:2019-08-03 02:09:28

标签: http http-headers

我进行了一些研究,发现状态行是HTTP响应的开始行。它包含诸如协议版本,状态文本,状态代码之类的信息。但是为什么它必须再次包含协议版本?

1 个答案:

答案 0 :(得分:0)

HTTP / 1.0和1.1的请求和响应中包含HTTP版本号。 (HTTP / 2完全不同。使用浏览器时,协议由环绕HTTP的TLS连接协商。)

RFC 2145说,

  

HTTP服务器应该发送等于最高版本的响应版本      服务器至少有条件符合的版本,以及      其主要版本小于或等于      请求。 HTTP服务器一定不能发送不是它的版本      至少有条件地遵守。服务器可以发送505(HTTP      如果无法使用      客户请求中使用的主要版本。

这意味着与HTTP / 1.1兼容的服务器应以HTTP / 1.1响应HTTP / 1.1和HTTP / 1.0请求。仅支持HTTP / 1.0的服务器可以使用HTTP / 1.0响应来响应HTTP / 1.1请求。

例如,如果您向Wikipedia.org发送HTTP / 1.0请求,

$ nc wikipedia.org 80
GET / HTTP/1.0

HTTP/1.1 400 
Date: Mon, 05 Aug 2019 18:03:20 GMT
Server: Varnish
...

服务器以HTTP / 1.1响应(尽管有错误)。

因此版本号也包含在响应中,因为它可能与请求中的版本号不同。