41

由于我们的网络服务器配置错误,主域向新位置发送了 302 重定向。我们解决了这个问题。清空浏览器缓存时,现在一切正常。

对于不清空缓存的“普通”客户端:302 重定向在浏览器中保留多长时间?

我正在寻找默认设置下每个主要浏览器(Chrome、Firefox、Safari、Opera、Edge、IE 12)的特定缓存时间(如果有)。

4

6 回答 6

39

除非Web 服务器还返回一个Cache-Controlor标头,否则它根本不应该被缓存。Expires根据RFC 2616,第 10.3.3 节 302 找到

请求的资源临时驻留在不同的 URI 下。由于重定向有时可能会改变,客户端应该继续使用 Request-URI 来处理未来的请求。此响应仅在由 Cache-Control 或 Expires 标头字段指示时才可缓存。

于 2012-08-31T09:53:33.650 回答
20

Jon Lin 在这里引用的标准使用“SHOULD”,它不如RFC 术语中的“MUST”强。这不仅仅是一个理论上的分歧。例如,Cloudflare缓存重定向

如果没有提供缓存标头(没有 Cache-Control 或 Expires)并且 url 是可缓存的(.jpg、.css、.js 等),则 CloudFlare 缓存 301 和 302。我们将 301 缓存几个小时,将 302 缓存更短的时间(约 20 分钟)。

因此,您应该确保可以处理它或使用显式标头(例如Cache-Control: private, no-cache)来指导浏览器和中间体对它进行缓存。

于 2015-04-13T17:37:46.717 回答
9

使用 Steve Sounder 的重定向缓存测试工具(感谢@LeonidVasilev),结果似乎不是预期的。如果没有过期标头或 cookie,结果如下:

Chrome 71:未缓存 ✔<br> Firefox 64:已缓存 ✕<br> Safari 12:已缓存 ✕

因此,尽管RFC 2616 第 10.3.3 302 节 Found声明了什么,但并非所有浏览器都遵循这些准则或可能被视为预期行为:(

于 2018-12-13T15:33:00.807 回答
3

添加

Cache-Control: no-store

响应的标头,它不会被缓存。截至 2020 年 7 月 20 日,所有主流浏览器都尊重这一点。

不过要小心中间缓存(代理/CDN):如果中间人的最小 TTL 不为零,那么无论您做什么,您的响应都会被缓存。参见例如:

管理内容在边缘缓存中的保留时间(过期)

表的最后一行(Origin 向对象添加了 Cache-Control: no-cache、no-store 和/或私有指令)。在这种情况下,防止缓存的唯一方法是将 TTL 设置为 0(Cache-Control: no-store当然还要添加标头)。

于 2020-07-20T08:59:43.110 回答
0

这取决于各个客户端的浏览器缓存设置:IE 有一个“从不”检查新页面的选项,它对重定向具有相同的效果。
AFAIR IE 的“自动”设置(默认?)也好不到哪里去。

于 2012-08-31T09:53:06.053 回答
0

火狐

它不应该被缓存,根据错误 812167

于 2018-12-07T07:29:33.143 回答