我进行了一些研究,发现状态行是HTTP响应的开始行。它包含诸如协议版本,状态文本,状态代码之类的信息。但是为什么它必须再次包含协议版本?
答案 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响应(尽管有错误)。
因此版本号也包含在响应中,因为它可能与请求中的版本号不同。