浏览器会缓存HTTP 301重定向多久?

浏览器会缓存HTTP 301重定向多久?

在没有特别指定缓存控制指令的情况下,301重定向默认会被缓存而没有到期日。

也就是说,它将一直被缓存在浏览器缓存中。如果您手动清除缓存或者缓存条目被删除以为新条目腾出空间,则它将从缓存中删除。

您可以在Firefox中通过转到about:cache并在磁盘缓存下找到它来验证这一点。尽管其他浏览器包括Chrome和基于Chromium的Edge没有用于检查缓存的about:cache。

在所有浏览器中,仍然可以使用缓存指令覆盖此默认行为,如下所述:

如果您不希望重定向被缓存

这种无限期的缓存仅是这些浏览器在没有指定其他标头的情况下的 默认 缓存。逻辑是您指定了一个“永久性”重定向且未给出任何其他缓存指令,因此他们将把它视为您想要无限期缓存。

浏览器仍然像对待任何其他响应一样遵守Cache-Control和Expires标头,如果它们被指定。

您可以向301重定向添加标头,例如Cache-Control: max-age=3600或Expires: Thu,01 Dec 2014 16:00:00 GMT。您甚至可以添加Cache-Control: no-cache以便浏览器不会永久缓存,或者添加Cache-Control: no-store使其无法在浏览器的临时存储中存储。

如果你不想让你的重定向永久生效,使用302或307重定向可能是更好的选择。尽管这在技术上是有效的,但发出301重定向并将其标记为非缓存是违背了301重定向的本意。您可能会发现一些例外情况,即“永久”重定向需要有一个时间限制。请注意,默认情况下浏览器不会缓存302和307重定向。

如果您以前发出了301重定向,但想撤销该操作

如果人们仍然在浏览器中缓存了301重定向,他们将继续被带到目标页面,而不管源页面是否仍然存在重定向。修复此问题的选项包括:

一个简单的解决方案是再次发出重定向。

如果浏览器在重定向期间第二次重定向到同一URL,它应该从源头再次获取它,而不是从缓存再次重定向,以避免重定向循环。评论指出,这现在在所有主要浏览器中都适用-但可能存在一些小型浏览器不支持的情况。

如果您无法控制先前重定向目标去到的站点,则无法解决问题。请尽最大努力请求站点所有者重新将流量重定向回您的站点。

预防胜于治疗-如果你不确定你想要永久停用旧URL,请避免使用301重定向。

相关数据