HTTP 1.1 服务器应该如何响应 HTTP 1.0 对 header 的请求,例如 HTTP 1.0 支持但 HTTP 1.1 不支持的 Pragma : no-cache
最佳答案
如果我们假设 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
响应 header 来禁用任何缓存,例如:
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)通信的旧客户端(.e.g. 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
header 或任何其他 HTTP 1.1 主义。在这种情况下,由于版本不兼容,HTTP 1.0 服务器可能会使用“400 Bad Request”(或其他类似的非成功响应代码)拒绝响应,或者服务器可能会发出 HTTP 1.0响应 HTTP 1.1 请求:
HTTP/1.0 200 OK
Pragma: no-cache
您看到的实际行为将取决于所涉及的客户端和服务器实现。
希望这对您有所帮助!
关于http - HTTP 1.1 服务器如何响应 HTTP 1.0 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35850518/