302重定向在浏览器中保存多久?

46

由于我们的Web服务器配置错误,主域名会向新位置发送302重定向。我们已经修复了这个问题。当清空浏览器缓存时,现在一切正常。

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

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


Steve Souders的文章“重定向缓存深入研究”包含了一个相关网络测试的链接。 - Leonid Vasilev
6个回答

44
除非Web服务器返回了Cache-ControlExpires头部信息,否则不应该缓存任何内容。根据RFC 2616第10.3.3节302 Found的规定:

所请求的资源暂时位于不同的URI下。由于重定向可能会不时地更改,因此客户端应继续使用原始请求URI进行未来请求。只有在缓存控制或过期头字段指示的情况下,才能缓存此响应。


2
谢谢。看起来我的默认测试浏览器(Chrome)刚刚欺骗了我:http://code.google.com/p/chromium/issues/detail?id=103458(Chrome缓存,其他浏览器不会)。 - Ole Albers
4
在我的互联网断开之前,我打算编辑我的答案并附上一条注释:虽然RFC说客户端应该继续使用原始URI,但这并不意味着所有浏览器都会这样做,这将需要视情况而定。 - Jon Lin

22

Jon Lin所引用的标准使用了“SHOULD”,这在RFC术语中不如“MUST”强制。这不仅是理论上的区别;例如,Cloudflare 确实缓存重定向

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

因此,您应该确保能够处理它,或者使用显式头(例如Cache-Control:private,no-cache)指示浏览器和中间件不要缓存它。


是的,这就是我的问题 - 没有指定 Cache-Control 导致重定向被缓存。但是可以查看此线程以获取更全面的指定不缓存标头的方法:https://dev59.com/03VD5IYBdhLWcg3wNY1Z - Kevin Qi

10
使用Steve Sounder的重定向缓存测试工具(感谢@LeonidVasilev),结果似乎并不是预期的。没有过期标头或cookie,结果如下: Chrome 71:未缓存 ✔
Firefox 64:已缓存 ✕
Safari 12:已缓存 ✕
因此,尽管RFC 2616,第10.3.3节302 Found所述,不是所有浏览器都遵循这些指南或可能被认为是预期的行为:(

3

添加

Cache-Control: no-store

响应头中带有header并且不会被缓存。截至2020年7月20日,所有主流浏览器都支持此功能。

但要注意中间缓存(代理/CDN):如果中介机构具有非零最小TTL,则无论您做什么,响应都将被缓存。例如,请参见:

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

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


0

这取决于每个客户端的浏览器缓存设置:IE有一个选项可以“永不”检查新页面,它对重定向具有相同的影响。
而据我所知,IE的“自动”设置(默认?)也没有多大改善。


0

Firefox

根据bug 812167,它不应该被缓存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接