Почему Chrome игнорирует /etc/hosts в OS X?

Я использую 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

Однако, когда я набираю youtube.com в Chrome, мой браузер устанавливает соединение не с 127.0.0.1, а с "обычным" IP-адресом для YouTube. Я бы ожидал, что Chrome разрешит youtube.com до 127.0.0.1.

У меня Chrome настроен на использование настроек прокси моей системы. В OS X, когда я захожу в "Системные настройки" > "Сеть" > "Дополнительно..." > "Прокси", я выбираю "Автоматическое обнаружение прокси".

Почему Chrome, похоже, игнорирует мою /etc/hosts файл?

4 ответа

Решение

Попробуйте добавить www.youtube.com в ваш файл hosts. youtube.com перенаправлен навсегда на www.youtube.com , так что пока вы посетили youtube.com один раз ваш браузер кэширует этот ответ и перенаправляет вас на www.youtube.com , Этот адрес отсутствует в вашем файле hosts, поэтому chrome логически разрешает его правильно.

Google Chrome игнорирует ваш файл hosts и выполняет поиск в DNS (несмотря на то, что думают другие, /etc/hosts не является частью DNS, это то, что использовалось до DNS). В то время как Google Chrome должен обрабатывать записи файла хостов, он этого не делает. Файл hosts, являющийся альтернативой DNS, будет прочитан, когда DNS-сервер недоступен (например, если вы отключили сетевое соединение).

Вы можете проверить это, добавив "127.0.0.1 foobar.dev" в ваш файл hosts, затем включив wireshark и наблюдая за вашим сетевым интерфейсом. Откройте Chrome, вставьте http://foobar.dev/ в адресную строку и перейдите. Вы увидите DNS-запрос в Wireshark, что-то вроде:

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

FWIW, Google DNS возвращает 127.0.53.53 для foobar.dev.

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.

Встроенная в Chrome "защита" включает в себя проверку домена на соответствие его собственному DNS и обход в обход определенных типов записей хоста, которые он считает "подозрительными", или записей для существующих сайтов, которые переопределяются, что означает, что большинство пользовательских записей хоста игнорируются. Особенно записи *.dev и *.local, используемые для разработки.

Отключение этого вопроса решило проблему в 100% случаев для меня. Это месяцами сводило меня с ума, когда я занимался местным развитием, и я нигде не мог найти ответ, перечисленный выше, все просто говорили, что этого не может быть. Оказывается, это был простой переключатель в расширенных настройках. Надеюсь, это поможет вам, ура.

Я наткнулся на этот вопрос, думая, что hosts файл не работал на Chrome для MacOS для .dev поддельные домены, которые я использую для разработки.

На самом деле это работает, по крайней мере, на Chrome 77.

Проблема не в том, что домен не найден, а в том, что все.dev теперь автоматически перенаправляются на https:

Если дважды щелкнуть имя домена, вы увидите виновника:

Теперь, когда Google сломал наш .dev В качестве решения ссылка выше предлагает перейти к другому TLD для развития, например .test или .localhost,

Localhost - это соглашение для адреса 127.0.0.1, который является внутренним адресом для tcp/ip, однако Chrome не использует / etc / hosts для определения адреса, он использует DNS-сервер, поэтому любой адрес не исходит от вашего / etc / hosts, но с DNS-сервера, если он использует / etc / hosts, он должен будет содержать полные имена хостов www для решения любого адреса.

Надеюсь это поможет.

Другие вопросы по тегам