Chrome为什么会忽略OS X上的/ etc / hosts?


27

我正在使用OS X 10.8.5和Chrome 30。

我添加127.0.0.1 youtube.com/etc/hosts文件中,现在它包含以下内容:

# 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
::1             localhost
fe80::1%lo0     localhost

127.0.0.1       youtube.com

运行命令时,traceroute youtube.com我收到预期的结果(youtube.com已解析为127.0.0.1):

traceroute to youtube.com (127.0.0.1), 64 hops max, 52 byte packets
1  localhost (127.0.0.1)  0.272 ms  0.118 ms  0.063 ms

但是,当我在Chrome中输入youtube.com时,我的浏览器未与127.0.0.1建立连接,而是与YouTube的“常规” IP地址建立了连接。我希望Chrome将youtube.com解析为127.0.0.1。

我已将Chrome配置为使用系统的代理设置。在OS X中,当我进入“系统偏好设置”>“网络”>“高级...”>“代理”时,我选择了“自动代理发现”。

为什么Chrome似乎忽略了我的/etc/hosts文件?


4
您确定要尝试解析youtube.com而不是www.youtube.com吗?也可能是youtube.com具有301重定向,该重定向由浏览器缓存,因此它甚至不会尝试与youtube.com联系(不在我的计算机上进行检查)。
user2313067 2013年

@ user2313067谢谢!我将/ etc / hosts修改为在www.youtube.com上也有一行代码,将其解析为127.0.0.1,从而达到了目的。
乔纳森

@ user2313067您可能想发表评论作为答案。
Blacklight Shining


您可能正在使用以某种方式改变连接的VPN或Chrome扩展程序
user1735921

Answers:


8

尝试添加www.youtube.com到您的主机文件。youtube.com会永久重定向到www.youtube.com,因此只要您访问过youtube.com一次,浏览器就会缓存此响应并将您重定向到www.youtube.com。此地址不在您的主机文件中,因此chrome在逻辑上可以正确解析它。


1
这样做可以清除您的重定向superuser.com/questions/304589/…或仅使用隐身模式进行开发
james.c.funk

1
添加www对我不起作用。即使清除了我所有的浏览器数据并刷新了我的DNS。也许这是Chrome中的一种反网络钓鱼措施?
f1lt3r

添加裸和www。hosts文件中的版本对我有用。我还禁用了Chrome中的chrome:// flags /#enable-new-
preconnect

10

Google Chrome浏览器会忽略您的主机文件,并进行实际的DNS查找(尽管其他人可能会认为,/etc/hosts这不是DNS的一部分,而是DNS 之前使用的内容)。虽然Google Chrome浏览器尊重这些主机文件条目,但不能。当没有DNS服务器可用时(例如,如果您禁用了网络连接),将读取hosts文件(替代 DNS)。

您可以通过在主机文件中添加“ 127.0.0.1 foobar.dev”进行测试,然后启用wireshark并在网络接口上进行监视。打开Chrome,然后将其放入http://foobar.dev/地址栏中即可。您将在Wireshark中看到DNS查询,如下所示:

2   1.668727000 192.168.32.104  8.8.8.8 DNS 75  Standard query 0x663a  A foobar.dev

FWIW,Google DNS为foobar.dev返回127.0.53.53。

3   1.706484000 8.8.8.8 192.168.32.104  DNS 91  Standard query response 0x663a  A 127.0.53.53

一种解决方法是使用HostAdmin,这是一个较旧的Chrome扩展程序,可让Chrome使用主机。但是,较新版本的Chrome(约38)已不再支持它。


Chrome实际上并不会忽略/etc/hostsOS X上的文件。至少不是OS X 10.10.3上的Chrome v43。
Petr Peller

Wireshark讲述了一个不同的故事。
Karl Wilbur

1
Chrome也查询Google DNS的事实可能并不意味着/ etc / hosts被忽略。这可以简单地用于优化/记录/间谍目的。我在OS X上经常使用/ etc / hosts文件,而Chrome没有任何问题。
彼得·佩勒

3
当我的主机文件具有“ 127.0.0.1 foo.dev”并且Chrome神奇地将foo.dev解析为127.0.53.53时,它正在忽略我的主机文件。
Karl Wilbur

1
是的,但对wifi的,铬使用hosts文件第一做一个DNS查找之前。它不是。那就是问题所在。
Karl Wilbur

5

我通过以下方法解决了此问题: 在Chrome的“高级偏好设置”中关闭“保护您和您的设备远离危险的站点”。

Chrome内置的“保护”功能包括直接根据自己的DNS检查域,并绕过它认为“可疑”的某些类型的主机条目或被覆盖的现有网站条目,这意味着大多数自定义主机条目都会被忽略。尤其是* .dev和* .local条目用于开发。

将此功能关闭已为我100%地解决了该问题。在进行本地开发时,这使我发疯了几个月,而我却找不到任何地方列出的答案,每个人都一直说这不可能。原来,这是高级设置中的简单切换。希望这对您也有帮助,加油。


谢谢,我知道它在上周有效,几天前我将chrome选项更改为默认值,但现在不再起作用。有效!
98percentmonkey

谢谢,我知道它在上周有效,几天前我将chrome选项更改为默认值,但现在不再起作用。有效!它在较新版本中称为“安全浏览”
98percentmonkey

0

Localhost是127.0.0.1地址的约定,它是tcp / ip的内部地址,但是Chrome并未使用/ etc / hosts来解决该地址,而是使用了DNS服务器,因此任何地址都不来自您的/ etc / hosts,但从DNS服务器开始,如果使用/ etc / hosts,则必须保留整个www主机名才能解析任何地址。

希望这可以帮助。


1
-1。/etc/hosts覆盖所有DNS服务器。是的,如果你正在使用 /etc/hosts,它必须包含所有的域名,但大多数的设置还包括DNS服务器。如果Chrome只是简单地要求操作系统解析域名(如应解析的域名),/etc/hosts则将首先进行检查,如果其中不包含条目,则将发送DNS查询。
Blacklight Shining

/etc/hosts 应该优先于DNS请求,但Google Chrome并非如此。尽管在hosts文件中可以执行它,DNS仍会执行自己的DNS查找。这很容易证明。对于使用.devTLD 进行本地开发,这尤其是一个问题。
Karl Wilbur

0

我偶然发现该hosts文件无法在Mac OS的Chrome for macOS上运行.dev我用于开发虚假域。

实际上,它确实工作,至少在Chrome 77。

问题不是找不到域,而是所有.dev现在都自动重定向到https

无法访问此网站-Chrome

如果双击域名,您会看到罪魁祸首:

https

既然Google .dev解决了我们的问题,作为解决方案,上面的链接建议移至另一个TLD进行开发,例如.test.localhost

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.