Firefox 5“缓存”301 重定向

Posted

技术标签:

【中文标题】Firefox 5“缓存”301 重定向【英文标题】:Firefox 5 'caching' 301 redirects 【发布时间】:2011-10-22 06:03:07 【问题描述】:

有没有办法禁用这个“功能”?

例如,如果向http://localhost/foo.html 发出请求,我已将其指定为“301”到根地址,那么所有随后对foo.html 的请求都会完全绕过 Web 服务器,并且 ffox 5 将检查它的缓存,请阅读这个 url 之前是 '301'ed 并且在没有检查更改的情况下重定向。

如果我已停止 foo.html 的 301'ing,我必须清除 firefox 的缓存以“修复”此问题的发生。

Chrome、IE 和以前版本的 Firefox 不这样做。

【问题讨论】:

即使删除缓存也不能为我解决这个错误(Firefox 17.0.1,Linux)。 @kirdie 在“清除最近历史记录”对话框中,确保将时间范围设置为“一切”,并选中“缓存”复选框。如果选择的时间范围比您对重定向网址的访问时间更近,则不会清除缓存条目。 @kirdie 和遇到相同问题的每个人:使用 Ctrl + H 查看历史记录。然后右键单击该站点并选择“删除该站点的所有历史记录”(或类似内容)。那是为我做的。 @LarsNyström:开发一个网络应用程序并遇到这个问题 - 你的建议对我来说完美无缺。在FF20.0中是“忘记这个网站” 301 不是被称为“移动永久”吗? '将显示请求 uri),我希望浏览器永久记住这一点,而不是每次都检查 http。 【参考方案1】:

在 Firefox 中,您拥有“Web 开发人员”工具 (Ctrl+Shift+I)。您可以单击“网络”选项卡并选中“禁用缓存”复选框以每次检查新版本的页面。然后加载原始 URL,它将刷新您的缓存。然后您可以再次启用缓存并从其他选项卡访问该 URL。 所以你不需要清除你的全部缓存。


从 cptstubing06 的评论来看,以下内容可以帮助清除缓存:

    键入 Ctrl+l 将光标放在位置栏上。 键入about:config 打开configuration settings。 确认所有警告。 键入browser.cache,然后按Enter 过滤设置。 双击browser.cache.check_doc_frequency。 将值从3 更改为1。 点击OK。 重新访问被痴迷缓存的 301 页面。 完成后将频率重置为 3。

Firefox 现在应该重定向到新的 301 页面,不再从缓存中获取重定向的页面。

【讨论】:

这对我来说是一个很好的解决方案——我 想要 99% 的时间缓存 301,但是一旦出现蓝色,我可能需要更改重定向的位置,并且不想清除我的整个缓存。澄清一下,Firefox 在工具下带有自己的Web Developer 菜单,这不是插件。该插件也称为Web Developer,但在您的工具菜单中显示为Web Developer Extension,可以在此处下载:addons.mozilla.org/en-us/firefox/addon/web-developer。 请注意——如果你想让firefox 更新它的缓存为你重定向的URL,你可以使用Web Developer Extension来临时控制firefox的改变行为到always 检查新版本,然后将其设置回正常设置。这是在 Web Developer Extension -> Disable -> Disable Cache -> Check For Newer Version Of Page -> Check For Newer Version Of Page Every Time. 无论您选择哪种方法,过程都是将此设置更改为始终检查新版本,然后加载具有缓存重定向的 URL。然后它将访问服务器并获取该 url 存在的任何新响应,并使用新响应更新其缓存。然后,您可以将缓存检查频率设置回原始值(默认为“当页面过期时”,但我将使用“每个会话一次”,以便现在无需我参与就可以处理这个确切的场景)。 @cptstubing06 感谢您的提示!希望您已将其作为解决方案提交,因此当您不想清除整个缓存时,我可以将其视为处理此问题的最佳方法。 仅供参考,您可能必须禁用 DNS over HTTPS 才能使其按预期工作。【参考方案2】:

301 只是一个普通的可缓存响应代码。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.2 说:

This response is cacheable unless indicated otherwise. 

因此,如果您不希望它被缓存,您的服务器需要通过用于控制缓存行为的正常标头进行指示。

你也可以clear the cache manually。

【讨论】:

我相信使用 302 会更直接,默认情况下是不可缓存的。 @Boris Zbarsky:问题是不是更多的是“如何清除缓存”而不是“如何首先防止缓存写入发生”? 这个问题对我来说确实像是“如何让自己不必清除缓存”! 这很糟糕,因为即使您知道重定向是错误的,您也无法“shift-reload”重定向。可以单独重新加载所有其他不良缓存资源,但不能重新加载这些该死的重定向。 我尝试使用来自 IIS 的 302 重定向,但从它们的行为来看,最新版本的 Firefox(以及 Chrome、Edge 和 IE)也会缓存这些重定向。我发现打开并关闭私人窗口是测试网站并避免毒害浏览器缓存的最佳方式。【参考方案3】:

我刚遇到这个问题,对我来说是两个问题。

这个特定的域名是通过 Cloudflare 路由的,所以我不得不将它设置为开发模式。我认为 Cloudflare 正在缓存 301 重定向,因此它不必将请求发送到服务器。此步骤可能显然不适用于您。

然后,我简单地清除了我的 Firefox 缓存(版本 11),方法是转到工具 -> 选项,单击右上角的高级按钮,选择网络选项卡,然后单击缓存的 Web 内容部分下的立即清除。请注意,我的缓存已设置为 0,但我仍需要单击“立即清除”按钮以使重定向停止被缓存。

我很想知道是否有其他人可以验证这一点。

【讨论】:

+1。您关于清除 Firefox 缓存的注释确实为我(作为用户/客户端,而不是网站所有者)修复了 Firefox 未获取 301 已更新的特定 URL。谢谢。 您可以使用这个 Firefox 插件删除刚刚缓存的重定向:addons.mozilla.org/en-us/firefox/addon/cacheviewer-continued【参考方案4】:

在缓存过时的重定向一个多月并重新启动后,我找到了适用于 Firefox 26 的解决方案。

    在“历史记录”菜单上,选择“显示所有历史记录”。 在搜索中,输入存在缓存重定向问题的域以显示结果列表。 右键单击其中一个并选择“忘记此站点”。

只有该站点的所有缓存页面、图像和重定向都会从缓存中删除。这使您可以清除开发网站的重定向,而无需清除缓存的其余部分。

附带说明,我认为 Firefox 最多只能缓存重定向几天。将它们缓存一个多月可能会使一个简单的错误成为一个大问题。

【讨论】:

这可行,但请注意,“忘记此站点”也会忘记 URL 历史记录(用于自动完成),甚至会忘记整个域的密码。可能不是你想要的。【参考方案5】:

一种快速解决方法是使用私人浏览器窗口。

【讨论】:

这是我的快速解决方案,有时只需在 URL 末尾添加一个问号即可。【参考方案6】:

最新版本的 Firefox 中内置的开发人员工具为此提供了解决方案。首先,在开发窗格打开时关闭缓存:

在任何页面上,按 F12 以调出开发者工具 点击最右侧的齿轮图标“工具箱选项” 在Advanced Settings 下检查选项Disable Cache (when toolbox is open)

现在,只要您想强制刷新缓存页面,请在打开 F12 开发工具箱的情况下加载/刷新页面。 Firefox 将绕过缓存并从服务器获取新数据。

我更喜欢这种方法,因为它不会改变浏览器在“正常”非调试浏览时的行为方式,而且您不会忘记将全局设置恢复为其原始值。

已在 Firefox 39 中验证

【讨论】:

它对缓存重定向没有帮助。【参考方案7】:

301 表示永久移动。因此,我认为缓存响应是合理的。

您是否尝试过设置 cache-controlexpires 标头?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9

【讨论】:

有时我们正在开发、迁移服务器或跟踪故障,确实需要关闭这些东西,因为它真的会妨碍我们。【参考方案8】:

在 Firefox 38.0 版中

Menu -> Edit -> Preferences -> Advanced -> Network -> Clear Now

为我工作。

【讨论】:

【参考方案9】:

301 表示永久移动并且可以缓存,所以我认为这是浏览器的“正确”行为。你应该使用303 See Other。

【讨论】:

IE 和 Chrome 缓存 303 和 HTTP 规范正在更改以允许缓存它。请参阅tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-15 的草稿。因此,防止重定向缓存的唯一安全方法是设置显式缓存控制标头。

以上是关于Firefox 5“缓存”301 重定向的主要内容,如果未能解决你的问题,请参考以下文章

避免 301 重定向缓存

301 和 301 http 重定向是不是可以使用 expires 标头进行缓存?

浏览器如何使用查询字符串缓存 301 重定向

如何撤消 301 重定向?

由于浏览器缓存,PHP 标头 301 重定向不起作用

从客户端缓存中删除 http 301 重定向