Cache之间有什么区别

Cache-Control: max-age=0意味着内容被认为是陈旧的(并且必须被重新获取),这实际上与Cache-Control: no-cache


我有同样的问题,并在我的搜索中发现了一些信息(您的问题是作为结果之一出现的)。 这是我确定的...

Cache-Control头有两个方面。 一方是Web服务器可以发送它的地方(也就是“原始服务器”)。 另一方面是浏览器(也就是“用户代理”)可以发送的地方。


当由原始服务器发送时

我认为max-age=0只是告诉缓存(和用户代理),响应从一开始就是陈旧的,因此他们应该在使用缓存副本之前重新验证响应(例如使用If-Not-Modified头),而, no-cache告诉他们在使用缓存副本之前必须重新验证。 从14.9.1什么是可缓存的:

无缓存

......缓存不得使用该响应来满足后续请求,而不必使用源服务器成功重新验证。 这允许源服务器甚至通过已配置为对客户端请求返回陈旧响应的高速缓存来防止高速缓存。

换句话说,缓存有时可能会选择使用陈旧的响应(尽管我相信它们必须添加一个Warning标头),但no-cache表示不管它们是什么,都不允许使用陈旧的响应。 也许你会希望在页面中生成棒球统计信息时应该使用SHOULD -revalidate行为,但是当您生成对电子商务购买的响应时,您需要MUST -revalidate行为。

尽管当你说no-cache不应该阻止存储时,你的评论是正确的,但在使用no-cache时实际上可能是另一个区别。 我遇到了一个页面,缓存控制指令揭秘,说(我不能保证其正确性):

实际上,IE和Firefox已经开始将no-cache指令视为指示浏览器不要缓存页面。 大约一年前我们开始观察这种行为。 我们怀疑这种改变是由于广泛使用这个指令来阻止缓存而导致的。

...

注意最近,“cache-control:no-cache”也开始表现得像“no-store”指令。

顺便说一下,在我看来, Cache-Control: max-age=0, must-revalidate基本上意味着与Cache-Control: no-cache 。 所以,也许这是一种方式来获得的MUST -revalidate行为no-cache ,同时避免了明显的迁移no-cache在做同样的事情, no-store (即没有任何缓存)?


当由用户代理发送时

我相信shahkalpesh的答案适用于用户端代理。 您还可以查看13.2.6消除多种响应的歧义。

如果用户代理发送带有Cache-Control: max-age=0 (又名“端到端重新验证”)的请求,那么沿途的每个缓存都将重新验证其缓存条目(例如,使用If-Not-Modified标题)一直到原始服务器。 如果答案是304(未修改),则可以使用所缓存的实体。

在另一方面,与发送请求Cache-Control: no-cache (又名“终端到终端重装”)不重新确认和响应时服务器不能使用的缓存副本。


最大年龄= 0

这相当于点击刷新,这意味着,除非我已经有最新的副本,否则请给我最新的副本。

无缓存

这是按住Shift键的同时点击刷新,这意味着,无论如何只需重做一切。


老问题现在,但是如果有其他人像我一样通过搜索来解决这个问题,看起来IE9将利用这个来配置资源在使用后退和前进按钮时的行为。 当使用max-age = 0时,在后退/前进印刷机上查看资源时,浏览器将使用最新版本。 如果使用no-cache,则资源将被重新获取。

有关IE9缓存的更多详细信息可以在此msdn缓存博客文章中看到。

链接地址: http://www.djcxy.com/p/46819.html

上一篇: What's the difference between Cache

下一篇: Hidden Features of ASP.NET