Дверь открылась и сразу закрылась
Браузер установил соединение, отправил запрос и стал ждать ответа. Но вместо страницы или хотя бы кода ошибки получил закрытие соединения без единого байта. Так и рождается ERR_EMPTY_RESPONSE: ответ есть, но он пустой.
Схожесть с другими ошибками обманчива. От таймаута он отличается тем, что соединение закрыто активно, а от сброса тем, что закрытие произошло корректно, без сигнала об аварии. Такое поведение чаще всего означает сбой приложения или срабатывание фильтра.
Ещё одно наблюдение: ошибка иногда выглядит случайной и исчезает после нескольких попыток. Это типично для перегруженного сервера или для одного нездорового узла за балансировщиком, который периодически закрывает соединения, не отправив данные.
Причины со стороны сервера
Приложение могло аварийно завершиться при обработке запроса и не успеть отправить ответ. Возможно, процесс превысил лимит памяти либо времени и был остановлен. Другой вариант — веб-сервер настроен так, что закрывает соединение на определённые запросы, например слишком большие или с некорректными заголовками.
В систему могли вмешаться защитные модули: они закрывают соединение без объяснений, когда запрос кажется подозрительным. Также причиной служит неудачная перезагрузка сервиса в момент обращения.
Причины на вашей стороне
Иногда пустой ответ формирует локальное окружение: промежуточный сервер, антивирус, расширение, которое перехватывает запросы. Сетевой фильтр родительского контроля тоже способен закрывать соединения без показа страницы с предупреждением.
Ещё вариант — неправильные настройки сети, например слишком маленький MTU или проблемы с подключением, из-за которых ответ теряется. Но чаще бывает так, что ошибка воспроизводится на каждом устройстве, и тогда причина у сайта.
Не исключён и вариант с очень медленным или обрывающимся Wi-Fi: если соединение прерывается на середине ответа, браузер в отдельных случаях сообщает именно о пустом ответе. Проверьте качество сигнала и попробуйте подключиться по кабелю.
Как проверить: ERR_EMPTY_RESPONSE
Откройте адрес на другом устройстве и в мобильной сети. Если сайт открывается, разбирайте локальные причины: расширения, антивирус, промежуточный сервер, сетевые настройки. Попробуйте режим инкогнито и другой браузер.
Если отказ повсеместный, проверьте другие страницы того же сайта: если все они выдают пустой ответ, скорее всего, лежит весь сервис. Если только некоторые, ищите ошибку в конкретном обработчике. При использовании форм и загрузок проверьте, не слишком ли большой размер отправляемых данных.
Что делать владельцу
Смотрите журналы веб-сервера и приложения на момент обращения: вы почти наверняка увидите аварийное завершение процесса, ошибку памяти или отказ по правилу. Проверьте лимиты на размер запроса и время выполнения, а также состояние процессов, которые обрабатывают запросы.
Если сервер стоит за промежуточный сервер или CDN, проверьте, что они не закрывают соединение раньше времени и что заголовки ответа заданы корректно. После исправления проверьте запрос повторно и убедитесь, что приложение стабильно перезапускается.
Если приложение падает при определённом запросе, воспроизведите его на тестовой копии и включите подробное журналирование. Часто причиной оказывается конкретная запись в базе данных или необычное значение параметра, на которое код не рассчитан.
Как отличать от близких кодов
Пустой ответ похож на 500, но у ошибки 500 сервер сообщает об ошибке, а здесь молчит. Похож он и на сброс соединения, где вместо тишины приходит явная команда разрыва. Разница помогает понять, где искать: при пустом ответе чаще виновато приложение или его окружение, при сбросе чаще посредники.
Учтите, что иногда пустой ответ отправляет защитный фильтр перед приложением. Если в журнале приложения ничего нет, а посетители получают ошибку, проверьте журнал фильтра и уровни чувствительности его правил.