Chrome忽略localhost子域的hosts文件

Mat*_*off 3 dns curl google-chrome hosts

当我尝试访问http://mysubdomain.localhostchrome解析时[::1]80,即使hosts文件中存在此域的显式条目.没有其他浏览器以这种方式运行.Firefox,safari和curl都解析了我的hosts文件中给出的IP地址.这是我目前整个主机文件:

##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
192.168.88.88  mysubdomain.localhost
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试访问http://mysubdomain.localhostchrome时,它无法解决问题192.168.88.88.这对我来说是个问题,因为它192.168.88.88是在我的计算机上运行的虚拟机.我可以将域更改为http://mysubdomain.localhttp://mysubdomain.dev,但这需要我更新项目中许多人使用的配置文件,我宁愿避免,因为我可能会破坏其工作流程的某些方面.

Firefox(按需工作)

在此输入图像描述

卷曲(按需工作)

在此输入图像描述

Chrome(无法正常工作)

在此输入图像描述

我已经尝试过的一些事情:

  • 我没有使用代理
  • 我已多次清除浏览器缓存
  • 我已经清除了dns缓存 chrome://net-internals/#dns
  • 我已经多次重启机器了
  • 我已使用terminal命令清除了系统DNS缓存 sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder
  • 我已多次尝试隐身模式
  • 我尝试过创建了一个新的Chrome用户帐户

系统信息:
Chrome版本:53.0.2785.116
操作系统版本:Mac OS 10.11.6(El Capitan)

Mat*_*off 10

经过进一步审查,我认为这很不幸地按照设计进行.从铬问题队列:

这是作为安全缓解完成的,因为OS X的解析器无法正确确保在网络上不查询.localhost域,这是确保.localhost真正本地化的关键安全属性.因为我们不能相信解析器做安全的事情,我们遗憾的是不能相信解析器(即使它可能是安全的)...

安全风险与正确配置的服务器与未正确配置的服务器无关.这是DNS解析器永远不应该向网络发送foo.localhost请求.如果是这样,网络攻击者可以使"foo.localhost"指向他们选择的任何IP.这是不好的,因为"本地主机"(和"*.localhost")有特殊的权限(CF http://www.w3.org/TR/powerful-features/#is-origin-trustworthy),因为他们有那些特权,他们需要是安全的.

实际上,似乎chrome可能是正确实现RFC-6761的唯一工具,其中部分说明:

名称解析API和库应该将localhost名称识别为特殊,并且应该总是返回地址查询的IP环回地址和所有其他查询类型的否定响应.名称解析API不应该将localhost名称的查询发送到其配置的缓存DNS服务器.

所以似乎没有办法解决这个问题.我将我的虚拟机的域名更改为http://mysubdomain.local

  • 不要忘记Mac OS X上的Bonjour使用.local TLD.我建议不要使用该TLD.谷歌已明确向ICANN申请购买.dev.我已经说了几年了,我们需要有一个专门的TLD用于本地开发.真的很可悲. (2认同)