繁体   English   中英

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

[英]What is the difference between no-cache and no-store in Cache-control?

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

据我所知, no-store意味着不允许缓存设备缓存该响应。 另一方面, no-cache意味着不允许任何缓存设备在不首先使用源验证缓存响应的情况下提供缓存响应。 但这种验证是关于什么的? 有条件搞定?

如果响应有no-cache ,但没有Last-ModifiedETag怎么办?

问候。

但那检查是什么?

正确检查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. 

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

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

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

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

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

  • No-store:客户端不会做任何缓存操作。
  • 无缓存:客户端将缓存响应,但客户端将在使用该缓存数据之前检查服务器:“服务器上的数据是否已更改?”:借助“If-Modified-Since”或“If-None-Match” ' 标题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM