Cache 控件中无缓存和无存储的区别是什么?

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

据我所知,no-store意味着不允许任何缓存设备缓存该响应。另一方面,no-cache意味着如果不首先使用源对缓存响应进行验证,那么任何缓存设备都不允许为缓存响应提供服务。但这种肯定是什么意思呢?有条件的?

如果一个响应有 no-cache,但是没有 Last-Modified或者 ETag怎么办?

问候。

40917 次浏览

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

正确检查 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 并不意味着永远不存在缓存,而是用户代理必须始终询问服务器是否可以使用它所缓存的内容。相比之下,no-store 说甚至不要保留一份拷贝,这意味着没有什么可问的。如果你知道“我可以重复使用这个吗?”总是否定的,通过跳过缓存验证并为其他数据节省缓存中的空间,可以提高性能。

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

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

下面是关于这个话题的 铬的问题是如何区分的:

No-cache 并不意味着“不缓存这个”(那就是 no-store)。No-cache 意味着不要将其用于正常加载,除非重新验证资源的新鲜性。历史导航不是正常的加载。