http - HTTP 1.1 服务器如何响应 HTTP 1.0 请求?

标签 http http-headers protocols cache-control http-1.1

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/

相关文章:

http - angularjs + mongolab $http.put 不更新模型

sql-server - ODBC、OLEDB 和 ADO.NET 的底层协议(protocol)有区别吗

networking - 返回 N 比。选择性重复

asp.net-mvc - 如何指定 HTTP 过期 header ? (ASP.NET MVC+IIS)

c - 用于嵌入式设备的良好串行通信协议(protocol)/堆栈?

http - http.CloseNotify 是否完全被 http.Request.Context().Done() 取代?

ruby - Golang HTTP 服务器超时

api - 使用 Powershell 发推文

javascript - 客户端收到 "Location"HTTP header 后如何处理 JavaScript?

angularjs - 如何从 angular 资源中获取完整的响应头