Cache-control中no-cache和no-store之间有什么区别?

时间:2011-09-27 17:36:00

标签: http caching http-caching

我发现Cache-Control:no-storeCache-Control:no-cache之间没有实际区别。

据我所知,no-store表示不允许缓存设备缓存该响应。另一方面,no-cache表示不允许缓存设备提供缓存响应,而不首先使用源验证它。但那个验证是什么?条件得到?

如果回复有no-cache但没有Last-ModifiedETag怎么办?

问候。

3 个答案:

答案 0 :(得分:54)

答案 1 :(得分:19)

  

但那是什么检查?

正确检查Last-ModifiedETag。客户端会询问服务器是否有使用这些标头的新版本数据,如果答案为否,它将提供缓存数据。


更新

来自RFC

no-cache
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use
 the response to satisfy a subsequent request without successful revalidation with the
 origin server. This allows an origin server to prevent caching even by caches that   
 have been configured to return stale responses to client requests. 

答案 2 :(得分:7)

正如您所指出的,no-cache并不意味着永远不会缓存,而是用户代理必须始终询问服务器是否可以使用缓存的内容。相比之下,没有商店说甚至不保留副本,这意味着没有什么可以问的。如果你知道答案“我可以重复使用吗?”永远不行,您可以通过跳过缓存验证并在缓存中为其他数据节省空间来提升性能。

除了效果之外,浏览器历史记录存在行为差异。 HTTP 1.1部分13.13表示“到期时间不适用于历史机制”。 no-cache标头描述了到期,因此不适用于历史机制,例如后退按钮。因此,用户可以在没有联系服务器的情况下向后导航到没有缓存的上一页。

另一方面,no-store标头阻止数据存储在会话之外,在这种情况下,它根本不可用于历史机制。如果用户没有存储,如果用户通过导航到另一个域结束其会话然后返回,则浏览器知道要显示的内容的唯一方法是从服务器再次获取初始页面。

以下是关于此主题的Chromium issue如何区分:

  

no-cache并不意味着“不要缓存此”(这将是无商店)。 no-cache意味着不要将此用于正常负载,除非为新鲜度重新验证资源。历史导航不是正常负载。