Windows 上的 Chrome 不遵守 hosts 文件,但其他浏览器却遵守

Windows 上的 Chrome 不遵守 hosts 文件,但其他浏览器却遵守

怎么了

我的机器上设置了一个简单的 Apache 服务器,可以通过 localhost 上的 80 端口访问。访问以下地址时:

它适用于 Chrome/Firefox 和其他浏览器

ping/curl 到 localhost 有效并返回 200 响应。

在我的 hosts 文件中添加一个条目以将主机名指向 localhost 之后,Chrome 似乎不遵守 hosts 文件中的条目。

让我解释一下,我的主机文件现在如下所示:

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1 localhost

::1 mydomain.local

当使用 Firefox/Edge/其他浏览器访问主机名时mydomain.local,它会返回我的 Apache 服务器的默认页面作为 200 响应。ping
/curlmydomain.local检查成功并显示它实际上指向 localhost 的 ::1 ipv6 版本中的 localhost。

但不知何故,Chrome 会DNS_PROBE_FINISHED_NXDOMAIN针对该主机名抛出一个错误。

已尝试过

  • 全新 Chrome 安装
  • 使用 ipconfig 刷新 Windows DNS 缓存
  • 通过 chrome://net-internals/ 刷新 Chrome DNS 缓存
  • 禁用所有 DNS 预取和保护设置(我刚刚禁用了 Chrome 上的所有内容https://i.stack.imgur.com/uAOfp.jpg
  • 使用以下标志运行 Chrome
    • –dns预取禁用
    • --禁用预连接
    • --隐身
    • --启动最大化
    • 禁用异步 DNS

所有尝试均失败

系统设置

  • Windows 10 专业版 x64 (1809)
  • Chrome 版本 74.0
  • Firefox Quantum 66.0.3

--
编辑我知道 Chrome 不能很好地兼容某些 TLD,我尝试过不同的选项,但都.loc .test .localhost没有成功

--
编辑2
引用的可能重复项已有 3 年历史,并且没有提供解决方案。如果此问题没有解决方案,Chromium 是否记录了此行为?它不允许主机条目?

答案1

我找到了如何“修复”该问题的方法,并将其发布在这里以供未来的读者阅读。

我该如何修复它?

我如何让 Chrome 真正将主机名指向 localhost ?实际上,这是一些奇怪的行为。只需将我正在使用的 TLD 更改为.localhost
根据 Chromium 的指导方针,自从引入.dev合法 TLD 以来,有一些保留的 TLD。

为了安全地满足这些需求,保留了四个域名,如下所列和所述。

  • 。测试
  • 。例子
  • 。无效的
  • .本地主机

建议使用“.test”来测试当前或新的 DNS 相关代码。
建议使用“.example”来编写文档或作为示例。
“.invalid”用于在线构建肯定无效且一眼就能看出无效的域名。
“.localhost”TLD 传统上在主机 DNS 实现中被静态定义为具有指向环回 IP 地址的 A 记录,并保留用于此类用途。任何其他用途都会与广泛部署的假定此用途的代码相冲突。

阅读更多这里

然而当我尝试使用 Chrome 时,它​​没有指向 localhost,.test这很奇怪,它应该可以正常工作。如果有人对此有任何意见,请随意。
谨防虽然这个解决方案在我的系统上有效,但它被认为会在 OSX 系统上导致一些意外行为。

从这个答案开始,在 Chrome 74 上,无法禁用 Chrome 自己的 DNS 主机解析器,除了这些 TLD 之外,所有主机条目都将被忽略

相关内容