header Cache-Control: max-age=0意味着内容被认为是过期的(必须立即重新获取),这实际上与Cache-Control: no-cache是一样的。
当前回答
信息= 0
这相当于单击Refresh,这意味着给我最新的副本,除非我已经有了最新的副本。
no - cache
这是按住Shift同时点击刷新,这意味着,不管发生什么都要重做。
其他回答
在我最近使用IE8和Firefox 3.5进行的测试中,两者似乎都符合rfc。但是,它们对源服务器的“友好性”有所不同。IE8对待无缓存响应的语义与max-age=0相同,必须重新验证。然而,Firefox 3.5似乎将无缓存等同于无存储,这在性能和带宽使用方面都很糟糕。
乌贼缓存,默认情况下,似乎从来没有存储任何无缓存头,就像Firefox。
我的建议是,对于您希望在每个请求上检查新鲜度的非敏感资源,设置public,max-age=0,但仍然允许缓存的性能和带宽优势。对于具有相同考虑的每个用户项目,使用private,max-age=0。
我会完全避免使用无缓存,因为它似乎已经被一些浏览器和流行缓存的功能等同为无存储。
此外,不要模仿Akamai和Limelight。虽然他们本质上把大量缓存数组作为主要业务,而且应该是专家,但他们实际上有既得利益,即从他们的网络下载更多的数据。谷歌可能也不是模拟的好选择。它们似乎根据资源随机使用max-age=0或no-cache。
我不是缓存专家,但Mark Nottingham是。这里是他的缓存文档。他在参考资料部分也有很好的链接。
根据我对这些文档的阅读,它看起来像max-age=0可以允许缓存发送缓存的响应到“同一时间”的请求,其中“同一时间”意味着足够接近,它们看起来与缓存同步,但无缓存不会。
这在MDN文档中直接回答了缓存控制:
大多数HTTP/1.0缓存不支持无缓存指令,所以 历史上max-age=0被用作一种变通方法。但只有 Max-age =0可能会导致在缓存时重用一个陈旧的响应 与源服务器断开连接。必须重新验证才能解决这个问题。 这就是为什么下面的例子等同于无缓存。 Cache-Control: max-age=0,必须重新验证 但是现在,您可以简单地使用无缓存代替。
在MDN文档中也有缓存验证:
It is often stated that the combination of max-age=0 and must-revalidate has the same meaning as no-cache. Cache-Control: max-age=0, must-revalidate max-age=0 means that the response is immediately stale, and must-revalidate means that it must not be reused without revalidation once it is stale — so in combination, the semantics seem to be the same as no-cache. However, that usage of max-age=0 is a remnant of the fact that many implementations prior to HTTP/1.1 were unable to handle the no-cache directive — and so to deal with that limitation, max-age=0 was used as a workaround. But now that HTTP/1.1-conformant servers are widely deployed, there's no reason to ever use that max-age=0-and-must-revalidate combination — you should instead just use no-cache.
信息= 0
这相当于单击Refresh,这意味着给我最新的副本,除非我已经有了最新的副本。
no - cache
这是按住Shift同时点击刷新,这意味着,不管发生什么都要重做。
这是一个老问题了,但是如果有人像我一样通过搜索发现了这个问题,那么IE9似乎会在使用后退和前进按钮时利用这个来配置资源的行为。当使用max-age=0时,浏览器在向后/向前按下查看资源时将使用最近的版本。如果使用了无缓存,则会重新获取资源。
关于IE9缓存的更多细节可以在这篇msdn缓存博客文章中看到。
推荐文章
- 有没有办法在python中做HTTP PUT
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 什么是http头“X-XSS-Protection”?
- 在nodejs http中body在哪里。得到回应?
- Ruby:如何将散列转换为HTTP参数?
- 在用nodejs和express创建的REST API中设置响应状态和JSON内容的正确方法
- 使用curl在PHP中获取HTTP代码
- 为跨源请求设置cookie
- HTTP 1.1和HTTP 2.0的区别是什么?
- 是否有一个装饰器来缓存函数返回值?
- 什么是“升级-不安全-请求”HTTP报头?
- 向Angular HttpClient添加一个HTTP头并不会发送这个头,为什么?
- HTTP 301和308状态码有什么区别?
- 什么HTTP状态码应该用于错误的输入
- 编排microservices