浏览器cachingHTTP 301多久?
我正在debuggingHTTP 301永久redirect的问题。 经过快速testing,似乎Safari重新启动时会清除301的高速caching,但Firefox不会。
IE,Chrome,Firefox和Safari什么时候清空他们的301scaching?
更新:例如,如果我想将example1.com
redirect到example2.com
,但我不小心将其redirect到example3.com
,那是一个问题。 我可以改正这个错误,但是同时访问example1.com
任何人都会将不正确的redirectcaching到example3.com
,所以他们将无法到达example1.com
或example2.com
直到清除caching。 经过调查,我发现没有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
我自己的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=3600
或Expires: 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-Control
和Expires
来执行相同的操作。 或者,如果您不想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回你。
其实这意味着:
-
a.com 301到b.com
-
删除a.com的301
-
将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>