
Все четыре означают одно и то же на том уровне, который важен: разговор так и не дошёл до результата. Chrome попытался открыть соединение с сервером, и соединение отвергли, оборвали, закрыли или на него так и не ответили - значит, нет ни страницы, ни кода состояния, и от сайта нечего читать.
Именно это отделяет их от ошибок, с которыми их обычно сравнивают. 404 или
504 означают, что сервер вам
ответил, по HTTP, хоть чем-то. Любой ERR_CONNECTION_ означает, что обмен провалился ниже HTTP,
до того как всё это могло произойти. Chrome придумывает эти имена сам, поэтому они совсем не похожи
на код состояния.
Четыре различаются тем, как именно всё сорвалось, и эта разница - большая часть диагноза.
ERR_CONNECTION_REFUSED
Что-то ответило, и ответом было «нет».
Машина по этому адресу доступна, и она активно отвергла соединение на этом порту. Там ничего не слушает, либо файрвол сразу отбивает соединение, а не молча его выбрасывает.
Самые частые причины, в том порядке, в каком их стоит проверять: сервер не запущен; он запущен на
другом порту, не на том, что в адресе; он привязан к 127.0.0.1, поэтому принимает соединения
только со своей же машины; или вы попросили https на порту, отдающем обычный http.
Если вы разработчик и видите это на localhost, это почти всегда одна из этих четырёх причин и
почти никогда не браузер.
ERR_CONNECTION_TIMED_OUT
Не ответило вообще ничего.
Chrome отправил пакеты в темноту и ждал. Это подпись чего-то, что молча выбрасывает трафик, вместо того чтобы его отвергать: файрвол, настроенный на отбрасывание, а не на отказ, адрес, который уже никуда не ведёт, VPN, отправляющий ваш трафик туда, откуда до места назначения не добраться.
Примета - ожидание. Отказ возвращается мгновенно; таймаут длится ровно столько, сколько хватает терпения браузера.
ERR_CONNECTION_RESET
Соединение было открыто, а потом его убили на полуслове.
Что-то отправило reset: сервер или, чаще, что-то между вами и им. Корпоративные прокси, досматривающие трафик, защитное ПО на машине, нестабильный канал или сетевое устройство, решившее, что соединение не разрешено, уже после того как оно началось.
Это тот из четырёх, который с наибольшей вероятностью вызван чем-то, кроме самого сайта. Если он случается в одной сети и не случается в другой, вы нашли ответ, вообще не трогая сайт.
ERR_CONNECTION_CLOSED
Та же форма, что и у reset, только завершено вежливее: другая сторона закрыла соединение, пока браузер ещё ждал продолжения.
На практике это указывает на сервер или на что-то перед ним, сдающееся на полпути: перезапускающийся
процесс, балансировщик, роняющий простаивающее соединение, несовпадение протоколов. В этом же
семействе вы увидите ERR_CONNECTION_ABORTED, что обычно значит, что запрос отменили до его
завершения, иногда сама страница, уходя на другую.
Четыре вопроса, которые находят причину примерно за минуту
Какой бы из четырёх у вас ни был, сужает его один и тот же разбор. Задавайте по порядку и останавливайтесь, как только один из них ответит.
- Другие сайты работают? Нет - и проблема в вашем подключении, а не в сайте.
- Работает ли в приватном окне? Да - и дело в расширении, куки или закэшированном файле, а не в сети.
- Работает ли на другом устройстве в той же сети? Да - и дело в этой машине: её защитном ПО, её настройках прокси, её VPN.
- Работает ли на мобильном интернете вместо Wi-Fi? Да - и дело в этой сети, а это обычное объяснение для reset, который видит один-единственный человек.
Два из этих четырёх вопросов полностью исключают сайт, и знать это стоит до того, как кто-то потратит полдня на серверные логи в поисках сбоя, который до сервера не дошёл.
Session Replay
Бесплатное расширение для Chrome. Один клик на странице, которая ведёт себя не так, захватывает скриншот, консоль и сетевой журнал и отдаёт вам ссылку, которую можно вставить в задачу.
Почему о них так плохо сообщают
Ошибка соединения не даёт HTTP-статуса и часто не даёт ничего полезного в консоли. Страница либо не загружается вовсе, либо - что диагностировать куда тяжелее - загружается прекрасно, а один запрос внутри неё падает вот так, и сайт выглядит сломанным каким-то конкретным и необъяснимым образом.
Второй случай - это тот, что приходит как «кнопка сохранения ничего не делает». Ни ошибки на экране, ни красного текста, ничего, что человек мог бы вам процитировать. В панели сети это очевидно и занимает одну строку: запрос в состоянии ошибки, без статуса, и хост рядом с ним.
Какой это хост, важнее всего остального в отчёте. Если падающие запросы называют ваш собственный домен, дело в вашей инфраструктуре или в маршруте до неё. Если они называют платёжного провайдера, картографический сервис или хост шрифтов, страница ведёт себя правильно, а то, от чего она зависит, - нет, и читающий может пойти посмотреть страницу состояния этого провайдера, а не вашу.
Сетевой журнал в отчёте об ошибке несёт ровно это, и в этом разница между воспроизводимым багом такого класса и историей о том, что случилось во вторник.
Коротко
- Refused: что-то сразу сказало «нет». Обычно на этом порту ничего не слушает.
- Timed out: никто ничего не сказал. Обычно что-то молча выбрасывает трафик.
- Reset: соединение умерло на лету. Обычно сеть посередине, а не сайт.
- Closed: другая сторона положила трубку рано. Обычно сервер или что-то перед ним.
И ни одна из четырёх не является ошибкой HTTP - поэтому рядом с ними не появляется код состояния и поэтому у сервера может вообще не быть записи о попытке.