当我尝试访问http://mysubdomain.localhost
Chrome解析为[::1]80
时,即使主机文件中存在此域的显式条目。没有其他浏览器以这种方式运行。 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
然而,当我尝试在Chrome中访问http://mysubdomain.localhost
时,它无法解析为192.168.88.88
。这对我来说是个问题,因为192.168.88.88
是在我的计算机上运行的虚拟机。我可以将域名更改为http://mysubdomain.local
或http://mysubdomain.dev
,但这需要我更新项目中许多人使用的配置文件,我宁愿避免,因为我可能会破坏一些他们的工作流程。
我已尝试过的一些事情:
chrome://net-internals/#dns
sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder
系统信息:
Chrome版本:53.0.2785.116
操作系统版本:Mac OS 10.11.6(El Capitan)
答案 0 :(得分:10)
经过进一步审核,我认为这是unfortunately working as designed。从铬问题排队:
这是作为安全缓解完成的,因为OS X的解析器无法正确确保在网络上不查询.localhost域,这是确保.localhost真正本地化的关键安全属性。因为我们不能相信解析器做安全的事情,所以我们不能相信解析器(即使它可能是安全的)...
安全风险与正确配置的服务器与未正确配置的服务器无关。这是DNS解析器永远不应该向网络发送foo.localhost请求。如果是这样,网络攻击者可以使“foo.localhost”指向他们选择的任何IP。这很糟糕,因为“localhost”(和“* .localhost”)具有特殊权限(c.f。http://www.w3.org/TR/powerful-features/#is-origin-trustworthy),并且因为它们具有这些特殊权限,所以它们必须是安全的。
事实上,似乎chrome可能是正确实现RFC-6761的唯一工具,其中部分说明:
名称解析API和库应该识别localhost 名称为special,应该总是返回IP环回地址 用于地址查询和所有其他查询的否定响应 类型。名称解析API不应该发送查询 localhost名称为其配置的缓存DNS服务器。
所以似乎没有办法解决这个问题。我将虚拟机的域名更改为http://mysubdomain.local
答案 1 :(得分:0)
玩过这个游戏并使用Firefox一段时间后,我偶然发现了一种解决方法。无需更改开发环境,您只需安装https://www.telerik.com/download/fiddler。
我相信,Fiddler绕过了chrome的DNS,因此您将拥有一个完美的工作系统,而不必更改所有环境。
我已经在Windows 10上使用Hyper-v over vagrant进行了测试。