防止Chrome缓存网站的DNS记录

10

Chrome缓存DNS记录,并且在成功连接到我的网站后(除了重新启动),倾向于忽略hosts文件的更改。启用DNS预取后,这种情况更加明显。

是否有任何页面标头可以指示Chrome不要缓存网站的DNS?像Cache-Control或类似307临时重定向的响应状态码吗?

3个回答

9

我不确定这是否完全符合您的要求,但我也很烦恼在开发环境中切换时需要清除缓存。我偶然发现了这个内部Chrome页面,只需点击按钮即可清除缓存:chrome://net-internals/#dns。进入该页面后,请单击“清除主机缓存”按钮。

编辑 如下面的答案所述,原因是您还需要刷新打开的套接字才能立即生效。在清除DNS缓存后,还需前往:chrome:// net-internals /#sockets并单击“刷新套接字池”按钮。

还请记住,操作系统可能会进行自己的缓存。Linux不会缓存dns条目,我认为(至少对于我来说,清除Chrome缓存就足够了),但是对于Windows或Mac,您可能还需要清除操作系统级别的DNS缓存。对于Windows,请从命令行运行ipconfig / flushdns ,对于Mac,请从命令行运行sudo dscacheutil -flushcache


感谢指出这个页面。我实际上已经将我的主机名设置为指向IPv6,因为输入127.0.0.1更容易,但我没有意识到Chrome没有启用IPv6(这个页面向我展示了这一点)。在清除主机缓存并启用IPv6后,立即就可以正常工作了。 - Kevin Peno
奇怪的是,这对我不起作用。如果我更改了我的hosts文件并单击按钮以清除,它仍然使用缓存的主机,即使表中不再列出任何缓存的主机。 - Dan
啊,我忘了可能还有操作系统级别的缓存。我使用的是Linux,我不认为操作系统会进行任何DNS缓存,但是Windows和Mac会。对于Windows,可以使用“ipconfig /flushdns”,对于Mac,则是“sudo dscacheutil -flushcache”。 - Scott

5
这可能是Google Chrome中的一个真正的bug。我创建了http://crbug.com/65570来跟踪它,但请添加您认为重要的任何其他信息到该bug中,以确保我们正确地理解了您的问题。
除了关闭Chrome之外,似乎唯一的解决方法是拔下网络电缆,然后重新插入。当Chrome看到这样的事件时,它会丢弃其套接字和DNS缓存。修复此错误的正确解决方案可能是在我们看到/etc/hosts已更改时执行相同的操作。
如果您想知道何时修复该错误,请转到http://crbug.com/65570并单击bug编号旁边的星号。并且,如我所说,请向bug中添加任何其他信息。

3
谢谢。我读到过Chromium项目有一个Shift+F5的功能可以强制刷新DNS,但这个功能还需要在Chrome浏览器中实现。 - Petrus Theron

2
在我的情况下,我经常使用自定义hosts文件在我的开发Web服务器和生产服务器之间切换。为了清除Chrome中的所有DNS缓存信息,我使用以下步骤,并且可以立即在需要加载更新的网站地址的同一标签中起作用:
  1. 复制并粘贴此URL到Chrome中:chrome://net-internals/#dns
  2. 单击“清除主机缓存”按钮并单击窗口右上角的小黑箭头,单击“清除缓存”和“刷新套接字”,新地址将立即加载。

Chrome Dns panel


1
更新:似乎只需点击“刷新套接字”按钮即可解决问题! - Matteo Conta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接