当客户端请求 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”。