浏览器cachingHTTP 301多久?

我正在debuggingHTTP 301永久redirect的问题。 经过快速testing,似乎Safari重新启动时会清除301的高速caching,但Firefox不会。

IE,Chrome,Firefox和Safari什么时候清空他们的301scaching?

更新:例如,如果我想将example1.comredirect到example2.com ,但我不小心将其redirect到example3.com ,那是一个问题。 我可以改正这个错误,但是同时访问example1.com任何人都会将不正确的redirectcaching到example3.com ,所以他们将无法到达example1.comexample2.com直到清除caching。 经过调查,我发现没有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 

我自己的testing表明:

  • IE7,IE8,Android 2.3.4根本不caching。
  • Firefox 18.0.2,Safari 5.1.7(Windows 7)和Opera 12.14全部caching,并清除浏览器重新启动时的caching。
  • IE10和Chrome的25caching,但不清除浏览器重新启动, 那么他们什么时候会清除?

至less有两个浏览器(Chrome浏览器和Firefox)会caching一个301redirect, 没有失效date

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

至less在Firefox中可以通过以下方式validation这一点about:cache并在磁盘caching下find它。

我不知道其他浏览器的行为,如IE10 / IE11。 但是,鉴于其他浏览器确实无限期地caching它,您将不得不适应这个。

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

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

如果你不想redirect被caching

这种不确定的caching只是这些浏览器在没有Cache-Control头的情况下的默认caching。 逻辑是你指定一个“永久”redirect,而不是给他们任何其他的caching指令,所以他们会把它视为你想要无限期地caching。

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

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

我认为更好的select是使用302或307redirect。 这些并不意味着浏览器或caching,他们是“永久的”redirect,因此不应该caching在caching控制标头的缺席。

对我来说,似乎发出一个301redirect,但标记为不可caching的是违背301redirect的精神 ,即使它可能在技术上是有效的。 YMMV,你可能会发现边缘情况下,“永久性”redirect有时间限制。

如果您之前发布了301redirect但希望取消该操作

如果人们在浏览器中仍然存在caching的301redirect,他们将继续被带到目标页面,而不pipe源页面是否仍然有redirect。 你的select来解决这个问题包括:

  • 最简单和最好的解决scheme是再次发布另一个301redirect。

    浏览器将意识到它正在被引导回它以前认为是一个被委托的URL,并且这应该导致它重新取回该URL以确认旧的redirect不在那里。

    编辑:一些评论引起怀疑,见下文。

  • 如果您无法控制前一个redirect目标所在的网站,那么您就不幸运了。 试着乞求网站所有者redirect回你。

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

要清除永久redirect,请转到chrome:// net-internals。 在顶部红色状态栏的右侧,单击向下箭头▼打开下拉菜单,在“工具”组下,select“清除caching”。

从版本48开始,这是我唯一能够清除caching301的东西。

301是根据HTTP RFC的可caching响应,浏览器将根据响应中的HTTPcaching头进行caching。 使用FireBug或Charles来检查响应头,以确定响应将被caching的确切持续时间。

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

 Cache-Control: no-store, no-cache, must-revalidate Expires: Thu, 01 Jan 1970 00:00:00 GMT 

一个答案,帮助那些拼命想摆脱redirectcaching的人:

Chrome会无限caching301redirect,或者直到您打开DevTools,请选中Disable cache(DevTools处于打开状态),然后重新加载页面

这在Chrome 39中适用于我,但不幸的是本地主机。

我有简单的解决scheme,适用于所有主stream浏览器(最新版本),包括IE浏览器,Chrome和FF 1. Ctrl + Shift + Del 2.1 Chrome浏览器:select“浏览历史logging”和“caching…”2.2 IE浏览器: “临时Internet文件和网站文件”,“Cookies和网站数据”,“历史logging”2.3 FF:“浏览和下载历史logging”,“caching”3.单击“删除”4.closures并重新打开浏览器。 它应该工作

作为@thomasrutter的答案

如果您之前发布了301redirect但希望取消该操作

如果人们在浏览器中仍然存在caching的301redirect,他们将继续被带到目标页面,而不pipe源页面是否仍然有redirect。 你的select来解决这个问题包括:

最简单和最好的解决scheme是再次发布另一个301redirect。

浏览器将意识到它正在被引导回它以前认为是一个退役的URL,这应该会导致它重新获取该URL,以确认旧的redirect不在那里。

如果您无法控制前一个redirect目标所在的网站,那么您就不幸运了。 试着乞求网站所有者redirect回你。

其实这意味着:

  1. a.com 301到b.com

  2. 删除a.com的301

  3. 将b.com 301添加到a.com

然后它工作。

为了testing的目的(所以没有caching的redirect),人们可以打开新的私人窗口 :单击CTRL+SHIFT+ N [或P ]

让用户在该url上提交post表单,caching的redirect消失了:)

 <body onload="document.forms[0].submit()"> <form action="https://forum.pirati.cz/unreadposts.html" method="post"> <input type="submit" value="fix" /> </form> </body>