我已经进行了一些研究,以发现状态线是HTTP响应的起点。它包含诸如协议版本,状态文本,状态代码之类的信息。但是为什么必须再次包含协议版本?
HTTP版本编号存在于HTTP/1.0和1.1的请求和响应中。(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.1 http/1.0响应的请求。
例如,如果您将http/1.0请求发送到wikipedia.org,
$ 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响应(尽管有错误(。
因此,版本号也包含在响应中,因为它可能与请求中的版本不同。