67

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

据我所知,no-store这意味着不允许缓存设备缓存该响应。另一方面,no-cache意味着不允许缓存设备在未首先与源进行验证的情况下提供缓存响应。但是这个验证是关于什么的?有条件的得到?

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

问候。

4

3 回答 3

113

请参阅下面的流程图以更好地理解 在此处输入图像描述

参考:(https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching?hl=en#cache-control

于 2015-06-30T06:05:50.197 回答
29

但那张支票是关于什么的?

确切地检查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. 
于 2011-09-27T17:39:49.220 回答
19

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

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

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

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

no-cache 并不意味着“不缓存这个”(那将是 no-store)。no-cache 表示不要将其用于正常加载,除非资源被重新验证以保持新鲜度。历史导航不是正常加载。

于 2017-07-08T00:18:49.367 回答