HTTP 1.1 服务器应如何响应 HTTP 1.0 请求,以获取Pragma : no-cache
HTTP 1.0 支持但 HTTP 1.1 不支持的标头
1 回答
如果我们假设 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
您看到的实际行为将取决于所涉及的客户端和服务器实现。
希望这可以帮助!