【问题标题】:What is the expected cache behaviour when both Date and Expires values are in the past?当 Date 和 Expires 值都是过去时,预期的缓存行为是什么?
【发布时间】:2014-08-14 20:14:58
【问题描述】:

在响应标头中指定缓存行为的一种相当标准的方法是同时设置Date 值和Expires 值。 (以及某种缓存控制指令,例如cache-control=public)。

假设在时间现在发出请求,假设现在是:

Tue, 24 Jun 2014 13:36:05 GMT

然后,将缓存值设置为 1 小时的标准响应可能包含以下标头:

Date: Tue, 24 Jun 2014 13:36:05 GMT
Expires: Tue, 24 Jun 2014 14:36:05 GMT

这将(并且应该)告诉任何中间缓存或 PoP 从现在开始缓存资源 1 小时。

但是,如果Expires Date 值都在过去,该怎么办。 (比如说,可能是因为服务器时钟错误)。

如果我们考虑同时提出另一个请求,现在是:

Tue, 24 Jun 2014 13:36:05 GMT

如果相应的响应包含以下标头值怎么办:

Date: Tue, 24 Jun 2014 11:10:00 GMT
Expires: Tue, 24 Jun 2014 11:44:00 GMT

在这里,两个值都已经过去了。过去的Expires 值通常足以触发no-cache,但是过去的Date 值会产生什么影响。

缓存实现是否应该使用Date 的值来计算与Expires 的偏移量,然后使用它来创建now + offset 的到期值?

RFC2616 日期部分
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.18
没有提及过去的日期值

RFC2616 过期部分
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.21
规定如果Date === Expires,则响应为'已经过期'

这些似乎都没有提到DateExpires都已经过去的情况?

更新/RFC2616 已失效
进一步阅读表明RFC2616 is dead 已被一组更具体的 RFC 所取代。

新的RFC7234 - HTTP/1.1: Caching 包含一个Calculating Freshness Lifetime,其中包含以下语句:

如果存在 Expires 响应头字段,则使用其值减去 Date 响应头域的值

这似乎准确地指定了上面概述的内容 - 使用 expires 值:

expiry=(Expires - Date) + Now

原始 RFC 中似乎没有任何等效声明。对于那些仍然遵循 RFC2616 的人,行为是否取决于各个浏览器/缓存供应商?

【问题讨论】:

    标签: http caching http-headers cache-control rfc2616


    【解决方案1】:

    在 2616 中,对应的部分是 13.2.3 年龄计算。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多