В Chrome в чем разница между ERR_EMPTY_RESPONSE и ERR_CONNECTION_CLOSED?

Вопрос или проблема

Я отлаживаю проблему, при которой пользователь видит ERR_EMPTY_RESPONSE и иногда ERR_CONNECTION_CLOSED в Google Chrome.

Я удивлен, но, по-видимому, у Google нет исчерпывающего списка возможных сетевых ошибок с объяснениями и потенциальными причинами.

Насколько я понимаю, поправьте меня, если я ошибаюсь, ERR_EMPTY_RESPONSE означает, что подключение может быть установлено; однако сервер не отправил никаких данных. Когда я говорю, что он не отправил никаких данных, я имею в виду, что он даже не отправил заголовки ответа. Это отличается от правильного ответа с Content-Length: 0

Вот пример CURL-запроса с пустым ответом:

chad-integration:~ # curl -v 111.222.159.30
* About to connect() to 111.222.159.30 port 80 (#0)
*   Trying 111.222.159.30... connected
* Connected to 111.222.159.30 (111.222.159.30) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.19.0 (x86_64-suse-linux-gnu) libcurl/7.19.0     OpenSSL/0.9.8h zlib/1.2.3 libidn/1.10
> Host: 111.222.159.30
> Accept: */*
> 
* Empty reply from server
* Connection #0 to host 111.222.159.30 left intact
curl: (52) Empty reply from server
* Closing connection #0

Однако в чем разница между пустым ответом и закрытым соединением? Означает ли это, что для ERR_CONNECTION_CLOSED сервер отправил некоторые данные, но затем закрыл соединение?

Если вы посмотрите на исходный код Chromium (который является основой для Chrome, Edge и др.) файл исходного кода net_error_list.h:

https://source.chromium.org/chromium/chromium/src/+/master:net/base/net_error_list.h?originalUrl=https:%2F%2Fcs.chromium.org%2Fchromium%2Fsrc%2Fnet%2Fbase%2Fnet_error_list.h

вы можете найти определения ошибок с комментариями для рассматриваемых случаев:

// Соединение было закрыто (соответствует TCP FIN).
NET_ERROR(CONNECTION_CLOSED, -100)

...

// Сервер закрыл соединение, не отправив никаких данных.
NET_ERROR(EMPTY_RESPONSE, -324)

Ответ или решение

На вопрос о различиях между ошибками ERR_EMPTY_RESPONSE и ERR_CONNECTION_CLOSED в Google Chrome можно ответить, исходя из подробностей, полученных из описания проблемы и исходного кода Chromium. Эти сетевые ошибки имеют разные предпосылки и причины, которые важно понимать для точной диагностики и решения проблем, связанных с сетевыми подключениями.

Теория: ERR_EMPTY_RESPONSE

ERR_EMPTY_RESPONSE возникает, когда браузеру удалось установить соединение с сервером, но сервер не отправил никаких данных в ответ, даже заголовков. Это отличается от корректного ответа, который может содержать заголовок с Content-Length: 0. В протоколе HTTP это может указывать на проблему на стороне сервера, где сервер либо не может обработать запрос и отправить ответ, либо неправильно настроен и не отсылает данные в ответ на запросы клиента.

Ошибка ERR_EMPTY_RESPONSE может быть вызвана рядом причин:

  1. Проблемы на сервере: Приложение сервера может иметь ошибки, которые предотвращают отправку данных.
  2. Сетевые сбои: Проблемы с сетевым оборудованием или маршрутизацией могут прервать передачу данных.
  3. Конфигурационные ошибки: Неправильная настройка сервера может привести к его неспособности обработать и отправить ответ.
  4. Фильтрация или брандмауэры: Фильтрация сетевого трафика может прервать или блокировать передачу данных.

В приведенном примере с CURL видно, что соединение с сервером было установлено, но не получено никакого ответа, что подтверждается сообщением Empty reply from server.

Теория: ERR_CONNECTION_CLOSED

ERR_CONNECTION_CLOSED указывает на то, что соединение с сервером было закрыто, что соответствует передаче TCP FIN от сервера к клиенту. Это может произойти, если сервер корректно или принудительно завершает соединение. Обычные причины включают:

  1. Ожидаемое закрытие соединения: Если сервер завершил передачу всех данных и корректно закрыл соединение.
  2. Принудительное закрытие сервером: В случае неполадок сервер может принудительно закрыть соединение до окончания передачи данных.
  3. Проблемы на клиентской стороне: Приложение клиента (например, Chrome) может вызвать закрытие соединения из-за тайм-аута или ошибок при обработке данных.
  4. Сетевые проблемы: Потеря соединения по пути от сервера к клиенту может привести к неожиданному завершению сеанса связи.

Такое закрытие соединения может происходить в случае высоких нагрузок на сервер или в ходе защитных действий, таких как защита от атак, где соединение закрывается, если запросы выглядят подозрительными.

Применение: решение проблем

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

  1. Анализ серверных логов: Проверка логов позволит выявить ошибки на уровне приложения, которые могут приводить к пустым ответам или завершению соединений.
  2. Проверка конфигураций: Убедитесь, что серверные приложения настроены корректно, и все порты, скрипты и службы функционируют должным образом.
  3. Использование инструментов диагностики сети: С помощью таких инструментов как CURL, ping и traceroute можно проверить связь между клиентом и сервером.
  4. Обследование состояния сети и безопасности: Определите, не блокируют ли промежуточные сетевые устройства (маршрутизаторы, брандмауэры) трафик между клиентом и сервером.
  5. Тестирование на других клиентах: Проверьте, сохраняется ли проблема при использовании других браузеров или устройств, что позволит выявить системные или сетевые проблемы.

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

Оцените материал
Добавить комментарий

Капча загружается...