我对此标题感到困惑,我已经读过Cache-Control:must-revalidate
在提供缓存项目之前有义务使用源验证所有请求,但只是陈旧的?或者无论陈旧还是新鲜?我在不同的地方读过两件事。
与Cache-Control:no-cache
有什么区别?因为这些标题看起来与我相同。
更新1:我从一本书中读过这篇文章:
Cache-Control: must-revalidate
响应标头告诉缓存 绕过新鲜度计算机制并重新验证每一个 访问:
@Peter O.指出了RFC所说的内容。所以那本旧书是错误的。
更新2 :在本教程中:http://www.mnot.net/cache_docs/
no-cache
- 强制缓存将请求提交给源服务器 每次发布缓存副本之前进行验证。这是 有助于确保认证得到尊重(与...结合使用) 公共),或保持严格的新鲜度,而不牺牲所有 缓存的好处。
must-revalidate
- 告诉缓存他们必须 遵守您向他们提供有关陈述的任何新鲜度信息。 HTTP允许缓存在特殊情况下提供陈旧的表示 条件;通过指定此标头,您将告知缓存 你希望它严格遵守你的规则。
答案 0 :(得分:10)
HTTP / 1.1的14.9.4部分:
当响应中存在must-revalidate指令时 收到的 一个缓存,该缓存绝不能在它成为之后使用条目 陈旧 在没有首先重新验证它的情况下响应后续请求 随着 原始服务器
HTTP / 1.1的第14.8节:
如果响应包含“必须重新验证”缓存控制 指令,缓存可以在回复时使用该响应 后续请求。但如果响应是陈旧的,则所有缓存 必须首先用原始服务器重新验证它......
所以看来只有陈旧的回复必须重新验证
收到must-revalidate
。
对于no-cache
,请参阅第14.9.1节:
如果no-cache指令没有指定字段名称[也就是 案子 这里],然后缓存不得使用响应来满足 随后 请求没有成功重新验证原始服务器...
因此,no-cache
适用于新鲜和陈旧的回复。
编辑:
这句话可能与此相关(第13.3节):
当缓存具有要用作响应的陈旧条目时 对于客户端的请求,首先必须检查原始服务器 (或者可能是一个带有新响应的中间缓存)来查看是否 它的缓存条目仍然可用。
因此,当缓存具有中间值时,must-revalidate
可能是相关的
缓存,因为否则缓存可以检查中间缓存的a
新的响应,而不是直接检查原始服务器。