Jon*_*han 36 networking dns google-chrome macos
我使用的是 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
Run Code Online (Sandbox Code Playgroud)
当我运行命令时,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
Run Code Online (Sandbox Code Playgroud)
但是,当我在 Chrome 中输入 youtube.com 时,我的浏览器没有与 127.0.0.1 建立连接,而是与 YouTube 的“正常”IP 地址建立连接。我原以为 Chrome 会将 youtube.com 解析为 127.0.0.1。
我已将 Chrome 配置为使用我系统的代理设置。在 OS X 中,当我转到“系统偏好设置”>“网络”>“高级...”>“代理”时,我选择了“自动代理发现”。
为什么 Chrome 似乎忽略了我的/etc/hosts
文件?
use*_*067 12
尝试添加www.youtube.com
到您的主机文件。youtube.com
永久重定向到www.youtube.com
,因此只要您访问过youtube.com
一次,您的浏览器就会缓存此响应并将您重定向到www.youtube.com
。此地址不在您的主机文件中,因此 chrome 在逻辑上正确解析它。
Kar*_*bur 11
谷歌浏览器会忽略您的主机文件并进行实际的 DNS 查找(尽管其他人可能认为,/etc/hosts
它不是 DNS 的一部分,而是在DNS之前使用的)。虽然谷歌浏览器应该尊重这些主机文件条目,但它没有。当没有可用的 DNS 服务器时(例如,如果您禁用了网络连接),将读取主机文件,作为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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
一种解决方法是使用HostAdmin,这是一个较旧的 Chrome 扩展程序,它使 Chrome 使用主机。但是,较新版本的 Chrome(> 38,apprently)不再支持它。
小智 7
我通过以下方式解决了这个问题: 在 Chrome 的高级首选项中关闭“保护您和您的设备免受危险网站的侵害”。
Chrome 的内置“保护”包括直接根据自己的 DNS 检查域,并绕过它认为“可疑”的某些类型的主机条目或已覆盖站点的条目,这意味着大多数自定义主机条目都将被忽略。特别是用于开发的 *.dev 和 *.local 条目。
关闭此功能已在 100% 的情况下解决了我的问题。在进行本地开发时,这让我疯狂了几个月,我在任何地方都找不到列出的答案,每个人都一直说这不可能发生。原来这是高级设置中的一个简单切换。希望这对你也有帮助,干杯。