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

4
两个头文件Cache-control: max-age=0Cache-control: max-age=-1在浏览器行为上有什么区别?
如果浏览器接收到max-age=0,则会立即重新验证缓存。 如果浏览器接收到max-age=10,则会在10秒后重新验证缓存。 max-age=-1的浏览器行为是什么?它是否与max-age=0相同?如果是,为什么我们需要两者?
2个回答

6

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.

3
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3 max-age 当中间缓存通过 max-age=0 指令被强制重新验证其自己的缓存条目,并且客户端在请求中提供了自己的验证器时,提供的验证器可能与当前存储在缓存条目中的验证器不同。在这种情况下,缓存可以使用任一验证器进行自己的请求,而不影响语义透明性。但是,验证器的选择可能会影响性能。最好的方法是中间缓存在进行请求时使用自己的验证器。如果服务器返回 304(未修改),则缓存可以使用 200(OK)响应将其现在经过验证的副本返回给客户端。然而,如果服务器回复一个新的实体和缓存验证器,中间缓存可以使用强比较函数将返回的验证器与客户端请求中提供的验证器进行比较。如果客户端的验证器等于源服务器的验证器,则中间缓存只需返回 304(未修改)。否则,它将使用 200(OK)响应返回新实体。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age delta-seconds 结果可以被缓存的最大秒数。Firefox 将其限制为 24 小时(86400 秒),而 Chromium 将其限制为 10 分钟(600 秒)。Chromium 还指定了默认值为 5 秒。一个值为 -1 将禁用缓存,需要对所有调用进行预检 OPTIONS 检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接