Cache-control: max-age=0
两个标头和之间的浏览器行为有什么区别Cache-control: max-age=-1
?
如果浏览器接收到 max-age=0,它将立即重新验证缓存。如果浏览器接收到 max-age=10,它将在 10 秒后重新验证缓存。max-age=-1 的浏览器行为是什么?和 max-age=0 一样吗?如果是,为什么我们需要两者?
Cache-control: max-age=0
两个标头和之间的浏览器行为有什么区别Cache-control: max-age=-1
?
如果浏览器接收到 max-age=0,它将立即重新验证缓存。如果浏览器接收到 max-age=10,它将在 10 秒后重新验证缓存。max-age=-1 的浏览器行为是什么?和 max-age=0 一样吗?如果是,为什么我们需要两者?
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.
来自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 检查。