为什么在请求行和状态行中呈现HTTP版本号



我已经进行了一些研究,以发现状态线是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响应(尽管有错误(。

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

最新更新