如果源 Web 服务器将响应标头中的 expires 值设置为相对很久以前传递的时间,会发生什么情况。
例如,考虑当前时间是格林威治标准时间 2013 年 1 月 25 日星期五,并且过期标头设置为 -->
过期:1994 年 12 月 1 日星期四 16:00:00 GMT
客户将如何响应上述实例?
任何帮助,将不胜感激
如果源 Web 服务器将响应标头中的 expires 值设置为相对很久以前传递的时间,会发生什么情况。
例如,考虑当前时间是格林威治标准时间 2013 年 1 月 25 日星期五,并且过期标头设置为 -->
过期:1994 年 12 月 1 日星期四 16:00:00 GMT
客户将如何响应上述实例?
任何帮助,将不胜感激
在标头中使用过去的日期Expired
(早于Date
标头值)进行响应是没有意义的,并且可能是一些严重错误配置的标志。话虽如此,客户端会将此类响应视为“已经过期”而不缓存它。如果Expires
日期等于Date
标头值(这是服务器将响应标记为“已过期”的正确方式)或格式无效,则同样适用。
有关详细信息,请参阅RFC 2616 的过期部分。
指向过去特定和固定日期的过期时间通常出现在相对较差的配置和/或相对较差的(启动器)代码中,其目的是防止 HTTP 1.1 客户端缓存响应。这会奏效,但过去的特定和固定日期显然是荒谬的。的值0
更有意义,或者与Date
响应标头完全相等的值,这种情况不太常见,但由HTTPExpires
标头规范推荐,引用如下(强调我的):
...
HTTP/1.1 客户端和缓存必须像过去一样处理其他无效的日期格式,尤其是包括值 "0"(即,“已经过期”)。
为了将响应标记为“已经过期”,源服务器发送一个等于 Date 标头值的 Expires 日期。(请参阅第13.2.4节中的到期计算规则。)
...
来自RFC 7234:
If an origin server wishes to force a cache to validate every
request, it can assign an explicit expiration time in the past to
indicate that the response is already stale.
这清楚地表明这是一种有效的行为,并且客户端应该将响应视为陈旧的并在每次后续调用时对其进行验证。