由于我们的网络服务器配置错误,主域向新位置发送了 302 重定向。我们解决了这个问题。清空浏览器缓存时,现在一切正常。
对于不清空缓存的“普通”客户端:302 重定向在浏览器中保留多长时间?
我正在寻找默认设置下每个主要浏览器(Chrome、Firefox、Safari、Opera、Edge、IE 12)的特定缓存时间(如果有)。
由于我们的网络服务器配置错误,主域向新位置发送了 302 重定向。我们解决了这个问题。清空浏览器缓存时,现在一切正常。
对于不清空缓存的“普通”客户端:302 重定向在浏览器中保留多长时间?
我正在寻找默认设置下每个主要浏览器(Chrome、Firefox、Safari、Opera、Edge、IE 12)的特定缓存时间(如果有)。
除非Web 服务器还返回一个Cache-Control
or标头,否则它根本不应该被缓存。Expires
根据RFC 2616,第 10.3.3 节 302 找到
请求的资源临时驻留在不同的 URI 下。由于重定向有时可能会改变,客户端应该继续使用 Request-URI 来处理未来的请求。此响应仅在由 Cache-Control 或 Expires 标头字段指示时才可缓存。
Jon Lin 在这里引用的标准使用“SHOULD”,它不如RFC 术语中的“MUST”强。这不仅仅是一个理论上的分歧。例如,Cloudflare会缓存重定向:
如果没有提供缓存标头(没有 Cache-Control 或 Expires)并且 url 是可缓存的(.jpg、.css、.js 等),则 CloudFlare 缓存 301 和 302。我们将 301 缓存几个小时,将 302 缓存更短的时间(约 20 分钟)。
因此,您应该确保可以处理它或使用显式标头(例如Cache-Control: private, no-cache
)来指导浏览器和中间体对它进行缓存。
使用 Steve Sounder 的重定向缓存测试工具(感谢@LeonidVasilev),结果似乎不是预期的。如果没有过期标头或 cookie,结果如下:
Chrome 71:未缓存 ✔<br> Firefox 64:已缓存 ✕<br> Safari 12:已缓存 ✕
因此,尽管RFC 2616 第 10.3.3 302 节 Found声明了什么,但并非所有浏览器都遵循这些准则或可能被视为预期行为:(
添加
Cache-Control: no-store
响应的标头,它不会被缓存。截至 2020 年 7 月 20 日,所有主流浏览器都尊重这一点。
不过要小心中间缓存(代理/CDN):如果中间人的最小 TTL 不为零,那么无论您做什么,您的响应都会被缓存。参见例如:
表的最后一行(Origin 向对象添加了 Cache-Control: no-cache、no-store 和/或私有指令)。在这种情况下,防止缓存的唯一方法是将 TTL 设置为 0(Cache-Control: no-store
当然还要添加标头)。
这取决于各个客户端的浏览器缓存设置:IE 有一个“从不”检查新页面的选项,它对重定向具有相同的效果。
AFAIR IE 的“自动”设置(默认?)也好不到哪里去。
火狐
它不应该被缓存,根据错误 812167