缓存控制中max-age = 0和max-age = -1之间有什么区别?

时间:2017-11-24 09:39:41

标签: http caching cache-control max-age

两个标头Cache-control: max-age=0Cache-control: max-age=-1之间的浏览器行为有何不同?

如果浏览器收到max-age = 0,它将立即重新验证缓存。 如果浏览器收到max-age = 10,它将在10秒后重新验证缓存。 max-age = -1时的浏览器行为是什么?和max-age = 0一样吗?如果是的话,为什么我们需要两者?

2 个答案:

答案 0 :(得分:3)

max-age采用与delta-seconds匹配的参数:

The delta-seconds rule specifies a non-negative integer, representing
time in seconds.

  delta-seconds  = 1*DIGIT
因此,

max-age=-1不是有效的指令,并且规范没有定义解释。规范建议:

Caches are
encouraged to consider responses that have invalid freshness
information to be stale.

答案 1 :(得分:2)

来自https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

  

最大年龄       当通过max-age = 0指令强制中间高速缓存重新验证其自己的高速缓存条目,并且客户端在请求中提供了自己的验证器时,提供的验证器可能与当前存储在缓存中的验证器不同条目。在这种情况下,缓存可以使用任一验证器来发出自己的请求,而不会影响语义透明度。       但是,验证器的选择可能会影响性能。最好的方法是让中间缓存在发出请求时使用自己的验证器。如果服务器回复304(未修改),则缓存可以使用200(OK)响应将其现在已验证的副本返回给客户端。但是,如果服务器使用新实体和缓存验证程序进行回复,则中间缓存可以使用强比较函数将返回的验证程序与客户端请求中提供的验证程序进行比较。如果客户端的验证器等于源服务器,则中间缓存只返回304(未修改)。否则,它返回带有200(OK)响应的新实体。

来自https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age

  

Δ-秒       可以缓存结果的最大秒数。       Firefox会在24小时(86400秒)和Chromium在10分钟(600秒)内完成此操作。 Chromium还指定默认值5秒。       值-1将禁用缓存,需要对所有调用进行预检OPTIONS检查。