为什么当客户端请求 HTTP/1.0 时 Apache 会发送 HTTP/1.1? 以及许多其他非常类似的问题

为什么当客户端请求 HTTP/1.0 时 Apache 会发送 HTTP/1.1? 以及许多其他非常类似的问题

当客户端请求 HTTP/1.0 时,Apache 会发送 HTTP/1.1?为什么?因此请求是:

Connected to example.com port 80
GET / HTTP/1.0

响应类似于:

HTTP/1.1 200 OK
Server: Apache

响应中显示 HTTP/1.1。但是为什么呢?

若要亲自尝试,只需执行相同的请求。

更新(使用端口 80);这些响应都正确吗?:

要求:

GET / HTTP/1.0

回复:

HTTP/1.1 200 OK



请求(如果缺少 Host:,则为 400 Bad Request):

GET / HTTP/2.0
Host: example.com

回复:

HTTP/1.1 200 OK



请求(Apache 不支持 HTTP/3;如果缺少 Host:,则为 400 错误请求,有效期至 HTTP/9.9):

GET / HTTP/3.0
Host: example.com

回复:

HTTP/1.1 200 OK



要求:

GET / HTTP/2

回复:

HTTP/1.1 400 Bad Request



要求:

GET / HTTP/3

回复:

HTTP/1.1 400 Bad Request

答案1

这是完全由设计决定的,当您的服务器尚未配置为支持 HTTP/2 和/或您未连接支持 HTTP/2 的客户端时,这是预期之内的。

RFC 2616要求 HTTP 服务器始终以它们声称支持的最高 HTTP 版本开始其响应。

该 HTTP 版本可能与客户端在其请求中使用的版本不同。通过非二进制 telnet 连接,Apache 可以支持的最佳版本是 HTTP/1.1

请注意,Apache(和其他 Web 服务器)应将其响应的其他方面限制为客户端和服务器相互支持的功能。例如,当您发出 HTTP/1.0 请求时,Apache 不应使用不属于 HTTP/1.0 规范的响应代码,例如代码“100”“Continue”。

相关内容