2016-09-23 5 views
2

Когда я пытаюсь посетить http://mysubdomain.localhost, chrome разрешает [::1]80, даже если в файле hosts есть явная запись для этого домена. Никакой другой браузер не ведет себя так. Firefox, сафари и завиток разрешают IP-адрес, указанный в файле моих хостов. Это совокупность моих хозяев файл в данный момент:Хром игнорирует файлы хостов для поддоменов localhost

## 
# 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 

И все же, когда я пытаюсь посетить http://mysubdomain.localhost в хроме, он не разрешает 192.168.88.88. Для меня это проблематично, потому что 192.168.88.88 - это виртуальная машина, работающая на моем компьютере. Я мог бы изменить домен на http://mysubdomain.local или http://mysubdomain.dev, но для этого мне потребуется обновить файл конфигурации, используемый многими людьми в проекте, чего я бы предпочел избежать, потому что я могу нарушить некоторые аспекты их рабочего процесса.

Firefox (рабочий по желанию)

enter image description here

завитка (рабочий по желанию)

enter image description here

Хром (не работает как желательно)

enter image description here

Некоторые вещи, которые я уже пробовал:

  • Я не использую прокси
  • Я очистив кэш браузера много раз
  • я очистил кэш DNS от chrome://net-internals/#dns
  • Я перезапустил машину несколько раз
  • я очистил кэш системы DNS с помощью команды терминала sudo dscacheutil -flushcache;sudo killall -HUP mDNSResponder
  • я пытался режим инкогнито несколько раз
  • Я попытался создал новую учетную запись пользователя хром

Информация о системе:
Chrome Версия: 53.0.2785.116
Версия ОС: Mac OS 10.11.6 (El Capitan)

ответ

5

После дальнейшего рассмотрения, Я думаю, что это unfortunately working as designed. Из очереди выпуска хрома:

Это было сделано, как смягчение безопасности, так как распознаватель OS Й не должным образом обеспечить .localhost домены не запрашиваются по сети, которая является ключевым свойством безопасности обеспечения .localhost является действительно местный. Поскольку мы не можем доверять распознавателю, чтобы сделать безопасную вещь, мы, к сожалению, не можем доверять распознавателю (даже когда это может быть безопасно) ...

Риск безопасности не касается правильно настроенного сервера и неправильно настроенного сервера , Это значит, что DNS-ресивер никогда не должен отправлять запросы foo.localhost в сеть. Если это произойдет, сетевой злоумышленник может сделать «foo.localhost» ссылкой на любой IP по своему выбору. Это плохо, потому что «localhost» (и «* .localhost») имеют особые привилегии (c.f. http://www.w3.org/TR/powerful-features/#is-origin-trustworthy), и поскольку у них есть эти особые привилегии, они должны быть безопасными.

На самом деле, кажется, что хром может быть единственным инструментом в связке правильно реализующего RFC-6761 которой, в частности:

API для разрешения имен и библиотеки должны признать LocalHost имена, как особый и всегда должны верните адрес петли IP для адресных запросов и отрицательных ответов для всех остальных запросов типов. API разрешения имен НЕ ДОЛЖНЫ отправлять запросы для имен локальных имен на свой сконфигурированный кеширующий DNS-сервер (ы).

Так что, похоже, нет никакого способа исправить это. Я изменю домен моей виртуальной машины на http://mysubdomain.local

+1

Не забывайте, что Bonjour на Mac OS X использует .local TLD. Я бы посоветовал использовать этот TLD. И .dev был применен для покупки Google, очевидно, с ICANN. Я уже говорил за годы, когда нам нужно иметь выделенный TLD для местного развития. Это очень жалко. –

Смежные вопросы