Ошибка 505 HTTP Version Not Supported означает, что сервер не принимает версию протокола, указанную в запросе. Обычный посетитель её почти не встречает: браузеры отправляют корректные запросы с актуальными версиями протокола. Чаще всего ошибку получают скрипты, программы, интеграции и прокси. Мы подняли стенд с nginx, Apache, Node и Python, отправили запросы с разными версиями HTTP и повторили один такой запрос на 2056 живых сайтах, чтобы выяснить, кто и когда отвечает 505.
Код ответа своей страницы можно проверить нашим сервисом проверки доступности: он запрашивает адрес со своего сервера и показывает, что ответил сайт.
Что означает ошибка 505
Каждый запрос HTTP/1 начинается со строки: метод, адрес и версия,
например GET / HTTP/1.1. Стандарт HTTP, RFC 9110, раздел 15.6.6,
описывает 505 так: сервер «does not support, or refuses to support, the
major version of HTTP that was used in the request message» — не
поддерживает или отказывается поддерживать основную версию HTTP,
указанную в запросе.
Версия состоит из двух цифр через точку. Первая — основная: она меняется, когда меняется сам формат сообщений. Вторая — дополнительная, внутри той же основной версии. Поэтому 505 касается именно основной цифры: «HTTP/2.0» вместо «HTTP/1.1».
Стандарт добавляет, что сервер должен объяснить в ответе, почему версия не поддерживается и какие протоколы он поддерживает. На практике серверы этого не делают: nginx отдаёт короткую страницу с кодом и своим названием.
Откуда в запросе берётся неправильная версия
HTTP/2 и HTTP/3 не используют текстовую строку версии. Браузер и сервер
договариваются о протоколе при установке защищённого соединения, а
дальше обмениваются двоичными кадрами. Строка GET / HTTP/2.0 — это
текстовый запрос HTTP/1 с неправильной версией. Так пишут:
- самописные клиенты и скрипты, где версию вписали руками;
- сканеры и боты, которые проверяют реакцию сервера;
- прокси и балансировщики, которые неправильно пересобирают запрос;
- старые библиотеки, которые не умеют работать с новыми протоколами.
Отдельный случай — клиент начинает разговор сразу на HTTP/2, без согласования, а сервер понимает только HTTP/1. Это мы тоже проверили: такой запрос получает не 505, а 400.
Стенд: какие версии дают 505
Мы отправили запрос GET / с разными версиями в nginx 1.22, Apache
2.4.68, встроенный сервер Node 20 и встроенный сервер Python.
| Версия в запросе | nginx | Apache | Node | Python |
|---|---|---|---|---|
| HTTP/1.1, HTTP/1.0 | 200 | 200 | 200 | 200 |
| HTTP/1.2, HTTP/1.9 | 200 | 200 | 400 | 200 |
| HTTP/2.0, HTTP/3.0 | 505 | 200 | 200 и 400 | 505 |
| HTTP/9.9 | 505 | 200 | 400 | 505 |
| HTTP/2 (без точки) | 505 | 400 | 400 | 505 |
| HTTPS/1.1, http/1.1 | 400 | 400 | 400 | 400 |
| Преамбула HTTP/2 без согласования | 400 | 400 | 400 | — |
Что из этого следует.
nginx отвечает 505 на основную версию выше 1. «HTTP/2.0», «HTTP/3.0» и «HTTP/9.9» получили 505, а «HTTP/1.2» и «HTTP/1.9» — 200: дополнительная цифра nginx не смущает. В журнале ошибок nginx — строка «client sent invalid version while reading client request line».
Apache 2.4 505 не отвечает. На «HTTP/2.0», «HTTP/3.0» и «HTTP/9.9» он вернул страницу с кодом 200, будто запрос правильный. Ошибку 400 он дал только на запись без точки и на «HTTP/1.10».
Node строже всех. Встроенный сервер принял «HTTP/2.0», но на «HTTP/3.0», «HTTP/1.2» и любую другую незнакомую версию ответил 400. 505 он не вернул ни разу.
Python отвечает 505 без строки статуса. Встроенный сервер написал в теле «Error code: 505», но не отправил строку «HTTP/1.0 505»: клиент получает только HTML.
Ошибка в записи — это 400, а не 505. «HTTPS/1.1» и «http/1.1» строчными буквами все четыре сервера отклонили как неправильный запрос.
Прокси прячет сервер за собой — возможно, это главный сценарий. Мы поставили nginx перед сервером Python. Ответ 505 давал nginx, и запрос до Python не доходил.
Как ошибка выглядит в браузере
Мы открыли в Chromium 149 сервер, который отвечает 505. Если сервер прислал страницу, браузер показывает её: обычно это крупная надпись «505 HTTP Version Not Supported» и подпись сервера. Если тела в ответе нет, Chrome показывает свою страницу: «Страница недоступна. Если проблема не исчезнет, свяжитесь с владельцем сайта. HTTP ERROR 505» и кнопку «Перезагрузить».
Наш замер: как отвечают живые сайты
17.10.2026 мы отправили на 2056 сайтов организаций Екатеринбурга по одному запросу с каждой версией: HTTP/1.1, HTTP/2.0, HTTP/3.0 и HTTP/1.2. Обычный запрос HTTP/1.1 получил ответ от 1668 сайтов.
| Версия | 505 | 400 | 200 |
|---|---|---|---|
| HTTP/2.0 | 1237 | 322 | 62 |
| HTTP/3.0 | 1235 | 335 | 52 |
| HTTP/1.2 | — | 71 | 1236 |
Ответ зависит от того, кто принимает запрос первым:
-
nginx стоит перед 1040 сайтами, и 986 из них на «HTTP/2.0» ответили 505.
-
DDoS-Guard — 294 сайта, и все 294 ответили 400.
-
Cloudflare — 80 сайтов, все ответили 505.
-
Apache — 46 сайтов: 20 ответили 200, как на стенде, и 15 — 505; вероятно, перед ними стоит другой сервер.
Наш сайт nexforce.ru работает на nginx и ведёт себя как стенд: 505 на «HTTP/2.0» и «HTTP/3.0», 200 на «HTTP/1.2».
Вывод: одна и та же ошибка клиента на разных сайтах выглядит по-разному. Если ваш скрипт получает 505 от одного сайта и 400 или 200 от другого, дело не в сайтах, а в запросе.
Причины ошибки 505
Рассмотрим подробно, чего бывает больше всего. Самый частый случай — запрос, который собрал не браузер.
На стороне клиента:
- версия HTTP в запросе вписана руками или устарела;
- библиотека или программа собирает запрос неправильно;
- клиент пытается говорить на протоколе, который сервер не включил.
На стороне сервера:
- прокси, балансировщик или защита пересобирает запрос и портит строку версии;
- в цепочке есть старый сервер, который не понимает версию, которую ему передаёт прокси;
- после обновления одного звена версии в цепочке перестали совпадать.
Что делать пользователю
Если ошибку видит обычный посетитель в браузере, проблема почти наверняка не у него. Можно проверить несколько простых вещей:
- Обновите страницу. Если ошибка разовая, она исчезнет.
- Откройте сайт в другом браузере или с телефона через мобильный интернет. Ошибка пропала — причина в прокси, VPN или расширении на вашем устройстве.
- Отключите VPN и прокси в настройках операционной системы на компьютере. Промежуточный сервер тоже может портить запросы.
- Обновите браузер до последней версии, если он давно не обновлялся.
- Очистите кэш и cookie этого сайта. С ошибкой 505 это связано редко, но иногда в браузере остаются старые данные, и это действие безвредно.
Если ошибка повторяется на разных устройствах, обратитесь к владельцу сайта: сообщите адрес страницы, время, когда возникла ошибка, и что вы делали. Эти данные помогут найти причину в журналах сервера.
Что делать разработчику и владельцу сайта
Проверить запрос
Если 505 получает ваш скрипт или интеграция, посмотрите, какую строку он
отправляет. В curl версию можно задать явно, а флаг -v покажет, что
ушло на сервер:
curl -v --http1.1 https://example.ru/
Для HTTP/2 используйте настоящую поддержку протокола в библиотеке, а не строку «HTTP/2.0» в запросе. Многие современные библиотеки умеют согласовывать протокол сами; если ваша не умеет, обновите её или переустановите программу, которая отправляет запросы.
Проверить сервер своими руками
Отправьте запрос с неправильной версией и посмотрите, кто ответил. Это покажет, какой сервер стоит первым:
printf 'GET / HTTP/2.0\r\nHost: example.ru\r\nConnection: close\r\n\r\n' \
| openssl s_client -quiet -connect example.ru:443 -servername example.ru 2>/dev/null \
| head -5
В ответе будет код и заголовок Server. Что такое ответ сообщает: 505 с подписью nginx — первым стоит nginx; 400 без подписи — скорее всего, защита. Этот же приём полезен, чтобы проверить состояние сайта после того, как вы перенастраиваете прокси.
Проверить цепочку прокси
Если 505 видят обычные посетители, ищите звено, которое портит запрос. Сравните журналы: запрос, который пришёл на внешний прокси, и запрос, который дошёл до сервера приложения. В журнале доступа nginx версия видна в строке запроса, а в журнале ошибок — пометка «invalid version». Проверьте, какую версию прокси использует к серверу за собой: в nginx это директива proxy_http_version, по умолчанию 1.0.
Включить нужные протоколы
Если клиенты должны работать по HTTP/2, включите его на сервере
правильно: в nginx — директивой http2 on на защищённом порту (в
версиях до 1.25.1 — параметром http2 в директиве listen). Тогда
клиенты договорятся о протоколе сами и строка версии в запросе не
понадобится.
Если сайт на хостинге
На виртуальном хостинге доступа к конфигурации веб-сервера обычно нет. В этом случае обратитесь в техническую поддержку провайдера хостинга: опишите, какой запрос получает 505, с какого адреса и в какое время. Если ошибка появляется после изменений в панели управления — например, после включения защиты или смены версии PHP, — сообщите об этом: такие изменения способны поменять сервер, который первым принимает запросы.
Малозаметные детали
- Защита и CDN отвечают сами. На живых сайтах Cloudflare давал 505, а DDoS-Guard — 400 ещё до того, как запрос доходил до сайта. Если перед сайтом стоит такой сервис, проверять нужно его настройки, а не только сервер.
- Внутренние запросы. Иногда 505 возникает не между браузером и сайтом, а между двумя серверами: сайт обращается к своему API, платёжному шлюзу или складу. Посетитель видит общую ошибку, а настоящий код остаётся в журнале.
- Временные сбои бывают при обновлении. Если существующие клиенты перестали подключиться сразу после изменения конфигурации, верните прежнюю и сравните настройки протоколов.
Как проверить, что ошибка устранена
Повторите тот запрос, который получал 505, и убедитесь, что ответ теперь 200. Если ошибку видели посетители, откройте сайт в нескольких браузерах и проверьте журнал доступа: записей с кодом 505 от обычных браузеров быть не должно. Записи от сканеров с «HTTP/2.0» в строке запроса — нормальная реакция сервера, их исправлять не нужно: сервер и должен так обрабатывать неправильные запросы. Проверьте и журнал поисковых роботов: на сайте, где всё работает, их запросы получают 200.
Похожие ошибки
- Ошибка 400 — сервер не разобрал запрос: на стенде её давала версия, записанная с ошибкой.
- ERR_HTTP2_PROTOCOL_ERROR — сбой внутри соединения HTTP/2, а не неверная версия.
- Ошибка 502 — прокси не получил правильного ответа от сервера за ним.
- Ошибка 413 — сервер отказался принять слишком большой запрос.
- Ошибка 501 — сервер не умеет выполнить метод запроса или способ передачи тела.
Границы замера
Стенд — четыре сервера без своих настроек. Microsoft IIS, LiteSpeed и облачные балансировщики мы на стенде не проверяли, только видели их ответы в обходе. В обходе отправляли по одному запросу на версию к главной странице по HTTPS; защита сайта могла ответить иначе на повторные запросы.
Коротко
Ошибка 505 — сервер не принимает основную версию HTTP из запроса. Браузеры её почти не вызывают: это ошибка скриптов, сканеров и прокси. nginx и Cloudflare отвечают 505 на «HTTP/2.0», Apache — 200, Node и DDoS-Guard — 400. Исправлять нужно клиента или звено цепочки, которое портит строку запроса.
