Почему Yosemite Safari никогда не прерывает попытки перейти к *.local?

В версии веб-браузера Safari, входящей в состав Mac OS Yosemite, попытка перейти на любой веб-сайт, чье имя хоста заканчивается на «.local», приведет к тому, что браузер будет вечно сидеть там в ожидании ответа, без истечения времени ожидания. Например, « http://foobar.local » или « https://baz.qux.local ». То же самое происходит при запуске Safari в симуляторе iOS на Mac (но на реальном устройстве iOS время запроса истекает).

Мне просто интересно - почему это? Вероятно, это ошибка Safari или сетевая проблема в Yosemite, которую я мог бы исправить, отредактировав какой-нибудь файл конфигурации?

Я работаю над веб-сайтом, который использует разные URL-адреса для медиа, и при локальном запуске сайта (для разработки) мы используем имена хостов .local для медиа-сайтов, которые раньше работали нормально, пока /etc/hosts указывает эти имена хостов на 127.0.0.1. Но теперь под Yosemite это вызывает зависание этих запросов. Прежде чем я обновлю URL-адреса в нашем коде и скажу всем нашим разработчикам обновить свой файл хостов с новыми именами хостов, я хотел посмотреть, может ли быть более простое исправление.

Ответы (1)

Я полагаю, это потому, что поиск имени хоста .local в основном является запросом на просмотр служб Bonjour; устройства и службы регистрируются через многоадресную рассылку, поэтому, поскольку foobar.local не указывает на IP-адрес (если только вы его не создадите), Safari, вероятно, никогда не достигнет стадии проверки доступности сайта.

В вашей ситуации я бы предпочел: а) настроить простой DNS-сервер для перенаправления запросов или б) объявить о ваших услугах через dns-sd:

dns-sd -P Webservice _http._tcp local 80 foobar.local 127.0.0.1 path=/webservicename

Это должно объявить прокси-сайт в вашей сети с именем «Webservice» для имени хоста foobar.local, который будет доступен по адресу http://127.0.0.1/webservicename .

Интересно, однако, что только Safari застревает на локальных доменах. В терминале «host foobar.local» сразу же дает сбой, потому что его нельзя разрешить.
@BrianKendig Да, я тоже не думаю, что такое поведение в Safari полезно, может быть, вам стоит подумать о том, чтобы отправить отчет об ошибке в Apple.