缓存控制标头中多个值的含义

san*_*han 5 caching http cache-control http-caching browser-cache

我读过有关单个缓存控制标头值的内容。为了测试我学到的东西,我打开 Facebook 并进行检查。这是我得到的 Cache-Control 响应标头:

cache-control:private, no-cache, no-store, must-revalidate
Run Code Online (Sandbox Code Playgroud)

我很困惑这个标头实际上告诉了什么,因为它一次包含 4 个值。那么,如果通过网络发送的资源包含这样的标头,会发生什么情况呢?

编辑:

no-store 表示“根本不存储,不在私有非公共缓存中存储”,no-cache 表示“是的,您可以缓存,但请确保在请求资源时重新验证新鲜度”。Private 表示“您可以存储在私有缓存中”。它不能同时完成这三件事。但是,我们让他们同时发送响应。看起来还有一些我不知道的附加规则。

Joe*_*Joe 5

RFC 7234是了解标头精确含义的一个很好的参考。

例如,无缓存和无存储意味着不同的事物,并且不能同时遵守。

他们绝对可以。这些指令是多余的,但并不矛盾。no-cache

指示缓存不得使用存储的响应来满足未在源服务器上成功验证的请求。

no-store

指示缓存不得存储此请求的任何部分或对其的任何响应。

由于no-store本质上比严格no-cache,结果是有效的no-store。其他标头也类似;我相信:

Cache-control: no-store
Run Code Online (Sandbox Code Playgroud)

将是获得相同结果的更简单的方法。但是,您看到的标头可能是建议的组合,而不是有意保持一致的策略。

请注意,正如规范所述,重复的指令可能无效:

当给定指令存在多个值时(例如,两个 Expires 标头字段、多个 Cache-Control: max-age 指令),该指令的值被视为无效。鼓励缓存将具有无效新鲜度信息的响应视为过时的。

但我不相信这里的情况是这样的。