我有一个本地网络服务在 0.0.0.0:8080 上监听,当从 chrome 访问时,我使用了 abc.localhost:8080/someWebPage,chrome 能够将主机名 abc.localhost 解析为 ::1,而其他浏览器则不能。
这是我的 /etc/hosts
127.0.0.1 localhost
::1 localhost
127.0.0.1 subdomain1.localhost
我在 Chrome 设置中的“隐私和安全”部分中禁用了“预加载页面以加快浏览和搜索速度”选项。
我从 chrome://net-internals/#dns 清除了主机缓存,并执行了 ipconfig /flushdns 命令
以下是来自 chrome netlog 的片段,显示 abc.localhost 已解析为 ::1 :
abc.localhost:8080
Start Time: 2020-03-18 12:52:49.027
t=2574 [st= 0] +SOCKET_ALIVE [dt=1897+]
--> source_dependency = 29267 (TRANSPORT_CONNECT_JOB)
t=2574 [st= 0] +TCP_CONNECT [dt=1]
--> address_list = ["[::1]:8080","127.0.0.1:8080"]
--> canonical_name = ""
t=2574 [st= 0] TCP_CONNECT_ATTEMPT [dt=1]
--> address = "[::1]:8080"
t=2575 [st= 1] -TCP_CONNECT
--> source_address = "[::1]:64756"
t=2575 [st= 1] +SOCKET_IN_USE [dt=56]
有人能解释一下 Google Chrome 浏览器如何解析未在 hosts 文件中配置的主机名,以及如何禁用此行为吗?
我使用的是 Chrome 版本 80.0.3987.132(官方版本)(64 位),我的操作系统是 Windows 10
更新 我在这里找到了答案Chrome 忽略 localhost 子域的 hosts 文件指向 chromium 错误跟踪器 https://bugs.chromium.org/p/chromium/issues/detail?id=489973 另一个相关问题 https://bugs.chromium.org/p/chromium/issues/detail?id=455825
Chrome 不再依赖 hosts 文件,它将强制将 localhost 和 *.localhost 主机名始终解析为环回地址,如https://www.rfc-editor.org/rfc/rfc6761#section-6.3
答案1
Chrome 会覆盖 localhost 域,出于安全原因将完全忽略 hosts 文件和 dns 查找。
答案2
我遇到了类似的问题,然后转到“设置”->“隐私和安全”->“安全浏览”,在那里我将它从“标准保护”设置为“无保护”。然后我的 /etc/host 文件中的地址就可以正常工作了,包括以下地址127.0.0.1 some.domain.org