3

HTTP 1.1 服务器应如何响应 HTTP 1.0 请求,以获取Pragma : no-cacheHTTP 1.0 支持但 HTTP 1.1 不支持的标头

4

1 回答 1

6

如果我们假设 HTTP 1.1 服务器想要向后兼容 HTTP 1.0 客户端,那么 HTTP 1.1 服务器将向 HTTP 1.0 客户端发送一个 HTTP 1.0 响应。

例如,假设您的 HTTP 1.0 客户端发送如下请求:

GET /path/to/resource HTTP/1.0

请注意,请求的最后一部分是“HTTP/1.0”,表示客户端支持的 HTTP 版本。我们会回到这一点,但这很重要。

您的 HTTP 1.1 服务器通常可能希望使用Cache-Control响应标头来禁用任何缓存,例如

HTTP/1.1 200 OK
Cache-Control: no-cache

但是Cache-Control不支持 HTTP 1.0 请求,并且上面的响应表明它是 HTTP 1.1 响应,这很奇怪,给定 HTTP 1.0 请求。

因此,HTTP 1.1 服务器必须生成符合 HTTP 1.0 的响应,如下所示:

HTTP/1.0 200 OK
Pragma: no-cache

理想情况下,HTTP 1.1 服务器会注意请求中的 HTTP 版本,并构造适合该 HTTP 版本的响应。对于与更新的、向后兼容的服务器(例如HTTP 1.1)通信的旧客户端(例如HTTP 1.0),这是可行的。

但是,如果客户端与服务器通信,例如 HTTP 1.1 客户端与 HTTP 1.0 服务器通信,会发生什么情况?在这种情况下,请求可能是:

GET /path/to/resource HTTP/1.1
Host: example.com
Cache-Control: no-cache

HTTP 1.0 服务器不知道Cache-Control标头或任何其他 HTTP 1.1-isms。在这种情况下,HTTP 1.0 服务器可能会因为版本不兼容而拒绝使用“400 Bad Request”(或其他类似的不成功响应代码)的响应,或者服务器可能会针对 HTTP 1.1 请求发出 HTTP 1.0 响应:

HTTP/1.0 200 OK
Pragma: no-cache

您看到的实际行为将取决于所涉及的客户端和服务器实现。

希望这可以帮助!

于 2016-03-12T17:55:35.943 回答