ERR_INVALID_HTTP_RESPONSE: что значит и как исправить
ERR_INVALID_HTTP_RESPONSE — Chrome ждал от сервера ответ по правилам HTTP, а получил что-то другое. Так бывает, если в адресе указан порт, на котором работает не сайт, а другая программа.
Содержание 10
Что сделать прямо сейчас
Если вы просто открываете сайт:
- Посмотрите на адрес в адресной строке. Если после имени сайта стоят двоеточие и число, например 8081 в адресе http://example.com:8081/, это номер порта.
- Попробуйте открыть сайт без порта: сотрите двоеточие и число и нажмите Enter. Например, вместо http://example.com:8081/ откройте http://example.com/.
- Если без порта сайт не открывается или ошибка появляется и на обычном адресе, исправить это может только владелец сайта. Сообщите ему адрес и код ошибки ERR_INVALID_HTTP_RESPONSE.
Если сайт ваш, переходите к разделам «Как проверить» и «Как исправить» ниже: там все команды по шагам.
Что значит ошибка
Браузер и сайт общаются по протоколу HTTP — правилам, по которым браузер просит страницу, а сервер её присылает. По этим правилам ответ сервера начинается со строки состояния, например HTTP/1.1 200 OK. Число в ней — код ответа, о кодах рассказано в справочнике Коды ответа HTTP. За строкой состояния идут заголовки — служебные строки об ответе, — и только потом сама страница.
Если ответ начинается с чего-то другого или в заголовках есть то, чего там быть не должно, Chrome не принимает такой ответ и показывает ошибку ERR_INVALID_HTTP_RESPONSE. В исходном коде Chrome это ошибка -370.
Ответ без строки состояния Chrome отвергает, когда в адресе указан порт. Если порта в адресе нет, Chrome может такой ответ принять: так, без строки состояния и заголовков, отвечали серверы самой первой версии протокола — HTTP/0.9.
Как выглядит в Chrome
Заголовок — «Страница недоступна», под ним — «Сайт example.com отправил недействительный ответ.» Ниже — код ERR_INVALID_HTTP_RESPONSE и кнопка «Перезагрузить».
Такой же текст Chrome показывает и при ошибке ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH: различаются они только кодом.
Причины
- В адресе указан порт другой программы. Кроме сайта, на сервере могут работать и другие программы, у каждой свой порт. Например, база данных MySQL сразу после подключения сама присылает приветствие в своём формате. Chrome получает его вместо ответа HTTP.
- Программа сайта отвечает не по правилам HTTP. Например, она отправляет страницу сразу, без строки состояния и заголовков.
- В заголовках ответа есть нулевой байт — невидимый символ с кодом 0. Он может попасть в заголовок из-за ошибки в коде программы сайта. По правилам HTTP такой заголовок недопустим, и Chrome не принимает ответ, даже если в остальном он правильный.
На стандартные порты почты, передачи файлов и подключения к серверу по SSH Chrome не заходит вовсе — для них он показывает другую ошибку, ERR_UNSAFE_PORT.
Как проверить
Шаг 1 выполните на своём компьютере: на Mac — в программе Терминал, в Windows — в командной строке. Если вы ни разу не открывали терминал, начните с инструкции Как открыть терминал: там всё по шагам. Скопируйте команду целиком, замените в ней http://example.com:8081/ на адрес, на котором Chrome показывает ошибку, и нажмите Enter. Адрес укажите целиком, как в адресной строке, вместе с портом.
Шаг 1. Запросите заголовки ответа
curl -sSI http://example.com:8081/Команда одинаково работает на Mac и в Windows. Ключ -I просит у сервера только заголовки ответа, без самой страницы, а -sS убирает с экрана всё лишнее, кроме сообщений об ошибках.
Если сервер отвечает по правилам HTTP, curl выведет строки заголовков. Первая из них — строка состояния, например HTTP/1.1 200 OK. Если же curl напишет такую строку:
curl: (1) Received HTTP/0.9 when not allowed— ответ пришёл без строки состояния и заголовков, а такой ответ curl по умолчанию не принимает. Значит, по этому адресу отвечает не сайт или программа сайта отвечает не по правилам HTTP. Переходите к шагу 2.
Если после строк заголовков curl напишет другую строку:
curl: (8) Nul byte in header— в заголовках ответа есть нулевой байт. Строки выше — заголовки, которые curl успел прочитать до него. Шаг 2 в этом случае не нужен: переходите к разделу «Как исправить».
Если curl вывел заголовки и никаких сообщений об ошибке, сверьте адрес в команде с адресом в Chrome: они должны совпадать до последнего знака, вместе с портом.
Шаг 2. Узнайте, какая программа работает на этом порту
Эту команду выполните на сервере. Если вы ещё не подключались к нему, начните с инструкции Как подключиться к VPS по SSH.
sudo ss -tlnp | grep ':8081 'Замените 8081 на номер своего порта. В конце строки, в скобках после users:, указано имя программы, например mysqld или node. Так вы узнаете, кто отвечает по этому адресу вместо сайта.
Как исправить
Если по адресу отвечает не сайт
Если шаг 2 показал базу данных или другую служебную программу, браузеру по этому адресу заходить незачем: такие программы работают с другими программами, а не с посетителями. Откройте сайт по его обычному адресу. Если ссылка с этим портом стоит на вашем сайте или в письме, исправьте её.
Если по этому порту должен был открываться ваш сайт, порт занят другой программой. Запустите программу сайта на свободном порту, которого нет в списке запрещённых на странице ERR_UNSAFE_PORT. Где меняется порт, зависит от программы: это настройка в её файле или параметр запуска.
Чтобы посетители заходили на сайт вовсе без номера порта, поставьте перед программой nginx: как это сделать, рассказано в инструкции Как разместить сайт на VPS, раздел «Если сайт — приложение на Node.js или Python».
Если программа сайта отвечает не по правилам HTTP
Ответ должен начинаться со строки состояния, за ней идут заголовки, пустая строка и только потом страница. Если программа отдаёт страницы через готовый веб-сервер или фреймворк, строку состояния и заголовки он добавляет сам. Если же программа сама пишет ответ в соединение, найдите в коде это место и проверьте, что строка состояния уходит первой.
После правки перезапустите программу и повторите шаг 1: curl должен вывести строки заголовков без сообщения об ошибке.
Если в заголовках нулевой байт
Найдите в коде программы места, где она задаёт заголовки ответа, и проверьте значения, которые туда попадают: в них не должно быть невидимых символов. Если значение берётся из файла, из базы данных или от посетителя, очищайте его, прежде чем ставить в заголовок.
После правки перезапустите программу и повторите шаг 1: строки curl: (8) быть не должно.
На обычном хостинге
На обычном хостинге сайты работают на портах 80 и 443, без номера в адресе. Если ошибка появляется на обычном адресе сайта или на адресе с портом, который дал хостинг, напишите в поддержку хостинга адрес и код ошибки ERR_INVALID_HTTP_RESPONSE.
Соседние ошибки
| Ошибка | Чем отличается |
|---|---|
| ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH | Тот же текст на странице ошибки, но в ответе две строки Content-Length с разными числами |
| ERR_UNSAFE_PORT | Chrome не стал подключаться: порт из адреса в его списке запрещённых |
| ERR_EMPTY_RESPONSE | Сервер закрыл соединение, ничего не прислав |
| ERR_CONNECTION_REFUSED | На этом порту никто не принимает подключения |
Источники
- Исходный код Chromium: net_error_list.h — ошибка -370; http_stream_parser.cc — когда Chrome отвергает ответ без строки состояния; http_response_headers.cc — отказ от заголовков с нулевым байтом; localized_error.cc — что Chrome пишет на странице ошибки.
- RFC 9112, раздел 4 — строка состояния ответа.
- RFC 9110, раздел 5.5 — нулевой байт в значении заголовка недопустим.
- Документация curl — ключ -I, ответы без заголовков и коды выхода.
- Документация MySQL: начало соединения — сервер базы данных первым присылает приветствие.
Проверено в Chrome 155 на локальном тестовом сервере 8 октября 2026 года.
Сверено 8 октября 2026 года.
Что почитать дальше
- ERR_UNSAFE_PORT — почему Chrome не открывает сайты на некоторых портах.
- Как разместить сайт на VPS — как открыть сайт без номера порта в адресе.
- «Не удается получить доступ к сайту» — коды ошибок Chrome и что они значат.
Проверено и обновлено: 08.10.2026