Chrome忽略localhost

时间:2016-09-23 18:03:38

标签: google-chrome curl dns hosts

当我尝试访问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.localhttp://mysubdomain.dev,但这需要我更新项目中许多人使用的配置文件,我宁愿避免,因为我可能会破坏一些他们的工作流程。

Firefox(按需工作)

enter image description here

卷曲(按需工作)

enter image description here

Chrome(无法正常工作)

enter image description here

我已尝试过的一些事情:

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

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

2 个答案:

答案 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进行了测试。