浏览器缓存HTTP 301多久?
我正在调试HTTP 301永久重定向的问题。 经过一次快速测试,似乎Safari重新启动时会清除301的高速缓存,但Firefox不会。
IE,Chrome,Firefox和Safari何时清除301s的缓存?
更新:例如,如果我想将example1.com
重定向到example2.com
,但我不小心将其重定向到example3.com
,那是一个问题。 我可以纠正这个错误,但是同时访问example1.com
任何人都会将不正确的重定向缓存到example3.com
,因此他们将无法访问example1.com
或example2.com
直到清除缓存。 经过调查,我发现没有Cache-Control
和Expires
头文件集。 不正确的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
我自己的测试表明:
至少有两个浏览器(Chrome和Firefox)会缓存一个301重定向,没有失效日期。
也就是说,只要浏览器的缓存可以容纳它,它就会保持缓存。 如果您手动清除缓存,或者清除缓存条目以腾出空间用于新缓存条目,它将从缓存中删除。
您至少可以在Firefox中通过以下方式验证这一点about:cache
并在磁盘缓存下找到它。
我不知道其他浏览器的行为,如IE10 / IE11。 但是,鉴于其他浏览器会无限期地缓存它,因此无论如何您都必须考虑到这一点。
在包括Chrome / Firefox在内的所有浏览器中,仍然可以使用标头覆盖此默认行为,如下所述:
注意:此答案是在2014年编写的,浏览器行为可能随时间而改变。
如果你不想重定向被缓存
这种无限制的缓存仅仅是这些浏览器在没有Cache-Control头的情况下的默认缓存。 逻辑是你指定一个“永久”重定向,而不是给他们任何其他的缓存指令,所以他们会把它当作你想要的那样无限期地缓存。
浏览器仍然像任何其他响应一样遵守Cache-Control和Expires标头,如果它们被指定的话。
您可以将标题Cache-Control: max-age=3600
或Expires: 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-Control
和Expires
执行相同操作。 或者,如果您不想缓存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