浏览器缓存HTTP 301多久?

我正在调试HTTP 301永久重定向的问题。 经过一次快速测试,似乎Safari重新启动时会清除301的高速缓存,但Firefox不会。

IE,Chrome,Firefox和Safari何时清除301s的缓存?

更新:例如,如果我想将example1.com重定向到example2.com ,但我不小心将其重定向到example3.com ,那是一个问题。 我可以纠正这个错误,但是同时访问example1.com任何人都会将不正确的重定向缓存到example3.com ,因此他们将无法访问example1.comexample2.com直到清除缓存。 经过调查,我发现没有Cache-ControlExpires头文件集。 不正确的301响应的标题会是这样的:

HTTP/1.1 301 Moved Permanently
Date: Wed, 27 Feb 2013 12:05:53 GMT
Server: Apache/2.2.21 (Unix) DAV/2 PHP/5.3.8
X-Powered-By: PHP/5.3.8
Location: http://example3.com/
Content-Type: text/html

我自己的测试表明:

  • IE7,IE8,Android 2.3.4根本不缓存。
  • Firefox 18.0.2,Safari 5.1.7(Windows 7)和Opera 12.14所有缓存​​,并在浏览器重新启动时清除缓存。
  • IE10和Chrome 25缓存,但在浏览器重新启动不清除, 所以何时清除?

  • 至少有两个浏览器(Chrome和Firefox)会缓存一个301重定向,没有失效日期。

    也就是说,只要浏览器的缓存可以容纳它,它就会保持缓存。 如果您手动清除缓存,或者清除缓存条目以腾出空间用于新缓存条目,它将从缓存中删除。

    您至少可以在Firefox中通过以下方式验证这一点about:cache并在磁盘缓存下找到它。

    我不知道其他浏览器的行为,如IE10 / IE11。 但是,鉴于其他浏览器会无限期地缓存它,因此无论如何您都必须考虑到这一点。

    在包括Chrome / Firefox在内的所有浏览器中,仍然可以使用标头覆盖此默认行为,如下所述:

    注意:此答案是在2014年编写的,浏览器行为可能随时间而改变。

    如果你不想重定向被缓存

    这种无限制的缓存仅仅是这些浏览器在没有Cache-Control头的情况下的默认缓存。 逻辑是你指定一个“永久”重定向,而不是给他们任何其他的缓存指令,所以他们会把它当作你想要的那样无限期地缓存。

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

    您可以将标题Cache-Control: max-age=3600Expires: Thu, 01 Dec 2014 16:00:00 GMT到您的301重定向中。 您甚至可以添加Cache-Control: no-cache以便它不会被浏览器或Cache-Control: no-store永久Cache-Control: no-store因此它甚至不能被浏览器存储在临时存储器中。

    然而,我认为更好的选择是使用302或307重定向。 这些并不意味着浏览器或缓存它们是“永久性”重定向,因此不应该缓存在Cache-Control头文件中。

    对我来说,似乎发出301重定向,但将其标记为不可缓存的行为违背了301重定向的精神,即使它可能在技术上是有效的。 YMMV,你可能会发现边缘情况下,对于“永久”重定向有时间限制。

    如果您以前发布过301重定向但希望取消重做

    如果人们仍然在他们的浏览器中缓存301重定向,他们将继续被带到目标页面,而不管源页面是否仍然具有重定向。 您的解决方案包括:

  • 最简单和最好的解决方案是再次发布另一个301重定向。

    浏览器会意识到它正在被引导回它以前认为是非授权的URL,并且这应该导致它再次重新获取该URL以确认旧的重定向不在那里。

    编辑:有些评论会对此产生怀疑,请参阅下文。

  • 如果您无法控制前一个重定向目标所在的网站,那么您的运气不佳。 试着恳求网站所有者重新回到你身边。

  • 此外,预防胜于治疗 - 如果您不确定是否要永久取消旧的URL,请避免301重定向。


    要清除永久重定向,请转至chrome:// net-internals。 在顶部红色状态栏的右侧,单击向下箭头▼打开下拉菜单,并在“工具”组下方选择“清除缓存”。

    从第48版开始,这是我唯一能够清除缓存301的东西。


    301是根据HTTP RFC的可缓存响应,浏览器将根据响应中的HTTP缓存头缓存它。 使用FireBug或Charles来检查响应标题,以确定响应将被缓存的确切持续时间。

    如果您想控制缓存持续时间,则可以使用HTTP响应标头Cache-ControlExpires执行相同操作。 或者,如果您不想缓存301响应,请使用以下标题。

    Cache-Control: no-store, no-cache, must-revalidate
    Expires: Thu, 01 Jan 1970 00:00:00 GMT
    
    链接地址: http://www.djcxy.com/p/55743.html

    上一篇: How long do browsers cache HTTP 301s?

    下一篇: HTTP caching in WCF Web API seems inconsistent across browsers