18

Я использую 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 ответа4

7

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, соответственно) больше не поддерживают его.

6

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

1

Я исправил эту проблему следующим образом: ВЫКЛЮЧИТЕ "Защитить себя и свое устройство от опасных сайтов" в расширенных настройках Chrome.

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

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

0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .