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

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

问题描述

头部 Cache-Control: max-age=0 暗示内容立即被认为是陈旧的(并且必须重新获取),这实际上与 Cache 相同-控制:无缓存.

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:

无缓存

...缓存不能使用响应满足后续请求没有成功的重新验证源服务器.这允许一个源服务器甚至防止缓存通过已配置为的缓存向客户端返回陈旧的响应请求.

...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.

换句话说,缓存有时可能会选择使用陈旧的响应(尽管我相信他们必须添加一个 Warning 标头),但是 no-cache 说他们' 无论如何都不允许使用陈旧的响应.也许您希望在页面中生成棒球统计数据时使用 SHOULD-revalidate 行为,但是您希望在生成响应时使用 MUST-revalidate 行为到电子商务购买.

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 时,这实际上可能是另一个不同之处.我看到一个页面,Cache Control Directives Demystified,即(我不能保证其正确性):

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 有开始处理无缓存指令就好像它指示浏览器甚至不缓存页面.我们开始观察这种行为大约一年前.我们怀疑这一变化是由广泛(和不正确)使用这个防止缓存的指令.

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"也开始表现就像no-store"指令一样.

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

顺便说一句,在我看来,Cache-Control: max-age=0, must-revalidate 应该与 Cache-Control: no-cache<基本相同/代码>.所以也许这是获得 no-cacheMUST-revalidate 行为的一种方法,同时避免 no-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-Control: 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天全站免登陆