Cache-Control有什么区别:max-age = 0和no-cache? [英] What's the difference between Cache-Control: max-age=0 and no-cache?

查看:232
本文介绍了Cache-Control有什么区别:max-age = 0和no-cache?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

标题 Cache-Control:max-age = 0 意味着内容被认为是陈旧的(并且必须立即重新获取),这实际上是相同的事情为缓存控制:无缓存

The header Cache-Control: max-age=0 implies that the content is considered stale (and must be re-fetched) immediately, which is in effect the same thing as Cache-Control: no-cache.

推荐答案

我有同样的问题,并在我的搜索中找到了一些信息(你的问题出现在其中一个结果)。这是我确定的......

I had this same question, and found some info in my searches (your question came up as one of the results). Here's what I determined...

Cache-Control 标题有两个方面。一方是Web服务器(也就是原始服务器)可以发送的地方。另一边是浏览器可以发送的地方(又称用户代理)。

There are two sides to the Cache-Control header. One side is where it can be sent by the web server (aka. "origin server"). The other side is where it can be sent by the browser (aka. "user agent").

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

I believe max-age=0 simply tells caches (and user agents) the response is stale from the get-go and so they SHOULD revalidate the response (eg. with the If-Not-Modified header) before using a cached copy, whereas, no-cache tells them they MUST revalidate before using a cached copy. From 14.9.1 What is Cacheable:


no-cache

...缓存必须不使用响应
来满足后续请求
而未成功重新验证原始服务器
。这允许
源服务器阻止缓存甚至
被已配置为
的缓存返回对客户端
请求的陈旧响应。

...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 表示无论如何都不允许他们使用陈旧的回复。当在页面中生成棒球统计数据时,您可能想要应该 - 重新生成行为,但是当您生成响应时,您需要必须 - 重新生成行为购买电子商务。

In other words, caches may sometimes choose to use a stale response (although I believe they have to then add a Warning header), but no-cache says they're not allowed to use a stale response no matter what. Maybe you'd want the SHOULD-revalidate behavior when baseball stats are generated in a page, but you'd want the MUST-revalidate behavior when you've generated the response to an e-commerce purchase.

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

Although you're correct in your comment when you say no-cache is not supposed to prevent storage, it might actually be another difference when using no-cache. I came across a page, Cache Control Directives Demystified, that says (I can't vouch for its correctness):


在实践中,IE和Firefox有
开始处理no-cache
指令,好像它指示
浏览器甚至不缓存页面。
大约一年前我们开始观察这个行为
。我们怀疑
这个变化是由
普遍(和不正确)使用这个
指令来阻止缓存的。

In practice, IE and Firefox have started treating the no-cache directive as if it instructs the browser not to even cache the page. We started observing this behavior about a year ago. We suspect that this change was prompted by the widespread (and incorrect) use of this directive to prevent caching.

。 ..

请注意,最近,缓存控制:
no-cache也开始表现为
,就像无商店一样指令。

Notice that of late, "cache-control: no-cache" has also started behaving like the "no-store" directive.

另外,在我看来 Cache-Control:max-age = 0,必须重新验证应基本上与 Cache-Control:no-cache 相同。所以也许这是一种获得 no-cache MUST -revalidate行为的方法,同时避免了的明显迁移-cache 做与 no-store 相同的事情(即没有任何缓存)?

As an aside, it appears to me that Cache-Control: max-age=0, must-revalidate should basically mean the same thing as Cache-Control: no-cache. So maybe that's a way to get the MUST-revalidate behavior of no-cache, while avoiding the apparent migration of no-cache to doing the same thing as no-store (ie. no caching whatsoever)?

我相信 shahkalpesh的答案适用于用户代理方。您还可以查看 13.2.6消除多个响应消息

I believe shahkalpesh's answer applies to the user agent side. You can also look at 13.2.6 Disambiguating Multiple Responses.

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

If a user agent sends a request with Cache-Control: max-age=0 (aka. "end-to-end revalidation"), then each cache along the way will revalidate its cache entry (eg. with the If-Not-Modified header) all the way to the origin server. If the reply is then 304 (Not Modified), the cached entity can be used.

另一方面,使用 Cache-发送请求控制:no-cache (又名端到端重新加载)没有重新验证,服务器绝不能在响应时使用缓存副本。

On the other hand, sending a request with Cache-Control: no-cache (aka. "end-to-end reload") doesn't revalidate and the server MUST NOT use a cached copy when responding.

这篇关于Cache-Control有什么区别:max-age = 0和no-cache?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆