Битлента
Ошибки и коды3 мин чтения·

NSURLErrorDomain -1004: не удалось подключиться к серверу

Код NSURLErrorDomain -1004 (cannot connect to host): что означает, чем отличается от -1009 и -1001, и как искать причину на устройстве, в сети и на сервере.

Значение кода

-1004 — константа cannot connect to host. Система нашла адрес сервера, но не смогла установить соединение с ним. В отличие от -1009, интернет у устройства есть. В отличие от -1001, проблема проявляется на этапе установки соединения, а не ожидания ответа.

Типичная картина: сервер выключен, порт закрыт, брандмауэр отвергает соединение либо адрес указан с ошибкой. Поэтому при таком коде разумно сразу проверять доступность самого сервера, а не настройки Wi-Fi устройства.

Что за этим стоит

Для серверов, которые вы не контролируете, самая вероятная причина — сбой или отключение службы. Приложение обращается к адресу, где никто не слушает порт, и получает отказ. Далее: перенос сервиса на другой адрес с неверным DNS, ограничения на стороне брандмауэра, перегрузка, когда сервер отбрасывает новые соединения.

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

Проверка пользователя

Убедитесь, что интернет есть: откройте сайт в Safari. Если приложение обращается к известному сервису, посмотрите его страницу статуса или подождите. Отключите сторонние сетевые профили и профили фильтрации на время проверки, смените сеть с Wi-Fi на сотовую и обратно.

Проверьте параметры приложения: если оно предполагает ввод адреса сервера, сверьте адрес и порт. Обновите приложение. Если ошибка возникает в одной сети, причина в ней: попробуйте другую и сообщите администратору, если это рабочая сеть.

Переустановка приложения полезна только при подозрении на неверно сохранённые настройки.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Проверка для разработчика

Проверьте, что сервер запущен и слушает нужный адрес и порт. Выполните запрос с другого устройства или из командной строки: для этого подойдёт curl. Если curl выдаёт отказ в соединении, дело в сервере или брандмауэре. Если curl работает, а приложение нет, проверьте настройки приложения, разрешения на локальную сеть, транспортные ограничения и адреса.

При работе с локальным сервером убедитесь, что он слушает не только петлевой адрес, а адрес, доступный устройству, и что брандмауэр не блокирует входящие соединения. Для незащищённых адресов проверьте, разрешены ли они в конфигурации.

Как отличить от других кодов

Если приложение выдаёт -1009, ищите проблему с сетью на устройстве. При -1001 разбирайтесь, почему ответ медленный. При -1004 разбирайтесь, почему сервер недоступен для соединения. Такое разделение экономит время: не нужно менять DNS, если проблема в закрытом порте, и не нужно проверять порты, если у устройства вообще нет сети.

Если подключение не удаётся только к одному сервису, а остальные работают, обычно проблема на его стороне и решается его владельцем.

Локальные серверы, симулятор и разрешения

Разработчики часто получают -1004 при обращении к локальному серверу. В симуляторе адрес localhost означает саму машину, что удобно, а на физическом устройстве localhost указывает на само устройство, и сервер, разумеется, не находится. Нужно указывать адрес компьютера в локальной сети и убедиться, что сервер слушает именно его.

Начиная с некоторых версий iOS приложению требуется разрешение на доступ к локальной сети, и без него подключения к устройствам в домашней сети отклоняются. Проверьте, выдано ли такое разрешение в настройках приложения. Наконец, незащищённые HTTP-адреса по умолчанию запрещены системой, и для отладки нужно явно объявить исключение в конфигурации приложения только для нужного узла.

Порядок проверки коротко: Убедиться, что сервис работает; проверить адрес и порт в настройках приложения; сменить сеть; отключить сторонние сетевые профили и фильтры; обновить приложение. Разработчику: проверить процесс сервера, открытые порты, брандмауэр и разрешения на локальную сеть. Такой порядок быстро приводит к причине, поскольку отказ в соединении почти всегда связан с доступностью конкретного узла.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
iosmacosnsurlсервер

Часто задаваемые вопросы

Читайте также