HTTP-коды: краткий экскурс в мир сетевых коммуникаций
Основы для начинающего веб-мастера.


Если вы хотя бы раз видели в браузере ошибку 404, то уже немного знакомы с HTTP-кодами. Их используют, чтобы понимать, как именно сервер обработал запрос и что ему мешает открыть сайт или загрузить данные.
Существует несколько десятков кодов, с помощью которых описывают самые разные ситуации: ошибки на стороне сервера, необходимость оплатить подписку для доступа к сайту, ограничения родительского контроля и другие.
В этой статье рассказываем о распространённых HTTP-кодах и объясняем, что они значат.
Содержание
- Что такое HTTP-коды
- Информационные коды HTTP 1хх
- Коды успешных ответов HTTP 2хх
- Перенаправления — коды HTTP 3хх
- Ошибки со стороны клиента — коды HTTP 4хх
- Ошибки на стороне сервера — код HTTP 5хх
Что такое HTTP-коды
HTTP-коды состояния — это трёхзначные числовые ответы сервера на запрос клиента, например браузера). Они показывают, как именно сервер обработал запрос: успешно или с ошибкой.
Для разработчиков HTTP-коды — инструмент диагностики: по ним видно, как сервер обрабатывает запросы и где возникают сбои. Пользователи встречают их в виде сообщений об ошибках вроде «404 — Страница не найдена» или «500 — Внутренняя ошибка сервера». Эти коды помогают быстро понять суть проблемы и приступить к её решению.

Скриншот: GitHub / Skillbox Media
Также HTTP-коды напрямую влияют на поведение поисковых роботов. Например, если страница отдаёт код 404, то роботы понимают, что страницы больше нет, и исключают её из поиска.
Рассмотрим основные HTTP-коды состояний и их значения, описанные в спецификациях RFC 9110, RFC 4918, RFC 6585 и RFC 2324.
Информационные коды HTTP 1хх
Эти коды означают, что запрос получен и сервер продолжает его обработку. Обычно браузеры их не показывают.
100 Continue: продолжайте
Сервер получил начальную часть запроса и готов принять тело. Этот код используют в ситуациях, когда клиент сначала отправляет заголовки, а затем, получив подтверждение от сервера, догружает основной контент, например большой файл. Благодаря этому получается избежать лишней передачи данных.
101 Switching Protocols: переключение протокола
Сервер подтверждает, что согласен перейти на другой протокол, указанный в заголовке Upgrade. Этот код используется, например, при переходе с HTTP на WebSocket: клиент запрашивает смену протокола, сервер отвечает 101, и после этого соединение продолжается уже по новому протоколу.
102 Processing: идёт обработка
Сервер получил и обрабатывает запрос, но операция требует времени. Этот код используется для предотвращения таймаута клиента при длительных действиях, например при загрузке большого файла.
103 Early Hints: предварительный ответ
Сервер заранее отправляет браузеру данные перед полным ответом. Обычно это предварительные заголовки с ресурсами, которые браузеру надо загрузить: CSS-стили, скрипты на JavaScript или шрифты. После загрузки сервер отправляет основной ответ.
105 Name Not Resolved: имя не удалось разрешить
Код сообщает, что сервер не смог разрешить доменное имя: DNS-запрос не вернул IP-адрес. Причиной могут быть опечатки в URL, неправильная настройка DNS-сервера или отсутствие подключения к интернету.
Коды успешных ответов HTTP 2хх
Коды из диапазона 2xx означают, что запрос клиента был принят, обработан и завершён.
200 ОК: успешно
Сервер сообщает, что выполнил запрос и отправил все необходимые данные. Код используют, например, при загрузке веб-страницы или получении информации через API.
201 Created: создано
Запрос выполнен успешно, и сервер создал новый ресурс. Например, пользователь зарегистрировался на сайте, а сервер в этот момент создал учётную запись.
202 Accepted: принято
Запрос принят в обработку, но ещё не завершён. Результат обработки может быть доступен позже. Код используют для длительных операций, например для обработки больших файлов.
203 Non‑Authoritative Information: информация не авторитетна
Сервер возвращает информацию, полученную из стороннего источника, но предупреждает, что она может быть неполной или изменённой. Например, прокси-сервер передал содержимое, но немного изменил его, удалив лишние заголовки.
204 No Content: нет содержимого
Сервер успешно обработал запрос, но в ответе нет тела — только заголовки. Код используют для запросов, где ответные данные не нужны, — например для удаления элементов с помощью API или для обновления статуса без возврата содержимого.
205 Reset Content: сбросить содержимое
Запрос выполнен успешно, и сервер просит сбросить содержимое на клиентской стороне (например, очистить форму). Код используется для REST API или для веб-приложений, где требуется сбросить состояние интерфейса. Например, вы отправили данные в форме, и сервер просит браузер очистить её после успешного отправления.
206 Partial Content: частичное содержимое
Сервер вернул часть данных, как запрашивал клиент. Код используют для загрузки данных по частям. Например, когда пользователь скачивает большой файл и после остановки запускает скачивание с определённого места.
207 Multi‑Status: многостатусный ответ
Сервер возвращает несколько статусов для разных частей одного запроса. Этот код используют в протоколе WebDAV в системах управления файлами, например в облачных хранилищах.
Перенаправления — коды HTTP 3хх
Коды из диапазона 3xx означают, что для завершения запроса клиенту требуется выполнить дополнительное действие — чаще всего перейти по другому URL. Это сигнал от сервера: запрашиваемый ресурс больше не доступен по прежнему адресу или временно перемещён, и клиент должен следовать указанному направлению.
300 Multiple Choices: множественный выбор
Этот запрос могут обслужить несколько вариантов ресурса, и сервер не делает автоматический выбор — решение остаётся за клиентом. Например, пользователь заходит на сайт с возможностью выбора языка. В таком случае сервер отправит список доступных вариантов.
301 Moved Permanently: перемещено навсегда
Запрошенный ресурс переместили на новый постоянный URI. В этом случае браузер автоматически обновит закладки и будет использовать новый адрес для следующих запросов.
302 Found: найдено
Ресурс временно доступен по другому URI. Сервер перенаправляет клиентский запрос, но не сообщает о постоянном перемещении, то есть в будущем следует продолжать использовать исходный адрес.
Этот код часто используют, когда нужно временно направить пользователя на другую страницу — например, при рекламных акциях, A/B-тестировании или при обработке форм.
303 See Other: просмотр других ресурсов
Сервер сообщает, что результат обработки запроса доступен по другому URI и клиенту следует выполнить GET-запрос по указанному адресу. Код 303 обычно используется для безопасного перенаправления после действий, выполненных методом POST.
Код часто используют для переадресации после отправки форм: пользователь заполнил поля, но результат сможет посмотреть по другому адресу.
304 Not Modified: не изменялось
Сервер сообщает, что запрашиваемый ресурс не изменился с момента последнего обращения клиента. Вместо повторной передачи данных сервер возвращает только заголовки и код 304, указывая, что можно безопасно использовать кэшированную версию.
Например, пользователь открыл сайт, и сервер видит, что в кэше уже есть изображения и CSS-стили из предыдущего посещения. Вместо повторной загрузки сервер просто сообщит: «Не модифицировано».
305 Use Proxy: использовать прокси
Код сообщает, что для доступа к запрошенному ресурсу надо использовать прокси-сервер. Код считается устаревшим и небезопасным. Большинство современных браузеров его уже не поддерживает.
306 Unused: резерв
Код 306 был зарезервировали в ранней спецификации HTTP для возможного использования в будущем. Изначально с помощью кода 306 планировали обозначать смену прокси.
307 Temporary Redirect: временное перенаправление
Код похож на 302, но есть важное отличие: при редиректе метод HTTP, например POST или GET, не меняется. Его используют для временных изменений URI.
Представьте, что у вас есть сайт, часть страниц которого пока недоступна. С помощью кода 307 можно перенаправить пользователей на страницу с уведомлением о технических работах.
308 Permanent Redirect: постоянное перенаправление
Код 308 указывает, что запрашиваемый ресурс навсегда переместили на новый URI и все последующие запросы должны выполняться по новому адресу. В отличие от 301, при перенаправлении сохраняется HTTP-метод и тело запроса — как в 307.
Ошибки со стороны клиента — коды HTTP 4хх
Коды из диапазона 4xx указывают, что ошибка произошла по вине клиента. Например, из-за некорректного запроса, отсутствия авторизации или нарушения логики API.
400 Bad Request: некорректный запрос
Сервер не может обработать запрос, поскольку он содержит синтаксическую ошибку или нарушает правила протокола. Это общий код, сигнализирующий о том, что запрос сформирован неправильно и не может быть понят даже до уровня логики приложения.

Читайте также:
401 Unauthorized: не авторизован
Доступ к ресурсу запрещён, потому что пользователь не предоставил правильные учётные данные. Например, зашёл на сайт, но забыл войти в свой профиль. Чтобы решить ошибку, достаточно ввести валидные данные для авторизации.
402 Payment Required: необходима оплата
Код 402 зарезервирован для случаев, когда доступ к ресурсу возможен только после оплаты. На практике его почти не используют и считают экспериментальным.
Изначально авторы спецификации HTTP планировали, что код 402 будут использовать для пейвола на сайтах. Однако в большинстве реализаций запросы к платному контенту обрабатывают с помощью кодов 401 и 403.
403 Forbidden: запрещено
Сервер понял запрос, но отказал в его выполнении — доступ к ресурсу запрещён, даже если клиент аутентифицирован. В отличие от 401, здесь дело не в отсутствии логина, а в недостаточных правах доступа или в прямом запрете со стороны сервера.
Например, такая ошибка может появиться, если пользователь попытается получить доступ к странице для администраторов сайта или откроет статью с региональными ограничениями.
404 Not Found: не найдено
404 — одна из самых известных ошибок. Она сообщает, что сервер не может найти запрашиваемый ресурс. Например, если страница расположена по другому адресу или вовсе не существует.
405 Method Not Allowed: метод не поддерживается
Сервер понимает запрос, но ресурс не поддерживает работу с заданным HTTP-методом. Например, если пользователь отправит PUT-запрос серверу, который принимает только GET, то на экране появится ошибка 405.
406 Not Acceptable: неприемлемо
Сервер не может предоставить контент в формате, указанном в заголовке Accept. Например, клиент запрашивает XML, а сервер может отправить только JSON.
407 Proxy Authentication Required: необходима аутентификация прокси
Запрос не получается выполнить из-за того, что прокси-сервер требует аутентификации. Например, если пользователь забыл ввести учётные данные от корпоративного прокси, то браузер выдаст ошибку 407.
408 Request Timeout: истекло время ожидания
Клиент слишком долго отправлял запрос, и сервер прервал соединение. Например, запрос завис из-за того, что у клиента медленный интернет.
409 Conflict: конфликт
Сервер не может обработать запрос из-за конфликта с текущим состоянием ресурса. Это означает, что запрос логически корректен, но нарушает целостность данных — например, из-за конкурентного обновления или нарушения бизнес-ограничений.
410 Gone: удалён
Запрашиваемый ресурс удалён с сервера без возможности восстановления. Например, если администраторы навсегда удалили страницу или файл, то при попытке запросить данные будет появляться код 410.
411 Length Required: необходима длина
Сервер отклонил запрос, потому что в нём не указан заголовок Content-Length, а он обязателен для обработки тела запроса. Этот код сообщает клиенту: чтобы продолжить, необходимо явно указать размер передаваемых данных.
412 Precondition Failed: условие ложно
Сервер отклонил запрос, потому что не выполнено одно из предварительных условий, указанных в заголовках If-Match, If-None-Match, If-Modified-Since или If-Unmodified-Since. Например, пользователь пытается изменить ресурс, который уже обновил другой клиент.
413 Request Entity Too Large: полезная нагрузка слишком велика
Сервер отклонил запрос, потому что размер тела превышает допустимый лимит, установленный на стороне сервера или прокси. Код может касаться файлов, JSON-документов или других типов содержимого, отправляемых в POST, PUT, PATCH и других методах с телом.
Например, пользователь пытается загрузить файл, который превышает максимальный размер, указанный в настройках сервера.
414 Request‑URI Too Long: URL слишком длинный
Сервер отклонил запрос, потому что адрес запроса слишком длинный и превышает допустимый лимит. Ошибка часто появляется при попытке отправить GET-запрос с большим количеством дополнительных параметров.
415 Unsupported Media Type: неподдерживаемый тип данных
Сервер отклонил запрос, потому что не поддерживает тип содержимого, указанный в заголовке Content-Type. Это означает, что сервер не знает, как обработать переданный формат данных, — даже если структура запроса корректна.
416 Requested Range Not Satisfiable: диапазон не достижим
Сервер не может выполнить частичную загрузку файла, потому что указанный диапазон байтов выходит за пределы размера файлов. Например, если пользователь хочет скачать диапазон от 500 до 1000 байт, но в файле их всего 400.
417 Expectation Failed: ожидание не оправдалось
Сервер отклонил запрос, потому что не может выполнить указанные в заголовке Expect условия. Чаще всего это означает, что клиент отправил заголовок Expect: 100-continue, но сервер не поддерживает такую схему предварительного подтверждения.
Клиенты используют заголовок Expect для указания поведения, которое ожидают от сервера перед отправкой запроса. Сервер возвращает код 417, если не может выполнить предписание.
418 I’m a teapot: я — чайник
Шутливый код, который появился в спецификации HTTP 1 апреля 1998 года. Он гласит: «Я — чайник. Я не могу заварить кофе, потому что это не моя функция». Например, если пользователь попытается выполнить «нелепый» запрос, то сервер вернёт код 418.
421 Misdirected Request: неверно направленный запрос
Сервер получил запрос, но не может его обработать, потому что он предназначен для другого хоста или ресурса. Ошибка появляется, когда клиент подключился к одному хосту, но направил запрос к другому.
422 Unprocessable Entity: необрабатываемый экземпляр
Сервер получил и понял запрос, но не может его обработать из-за семантических ошибок в теле запроса. Например, синтаксис запроса корректный, но данные внутри нарушают правила валидации данных.
423 Locked: заблокировано
Сервер понимает запрос, но отказывает в его выполнении, поскольку над ресурсом уже производится операция или на него наложена блокировка. С помощью кода 423 реализуют функцию совместного редактирования файлов или документов.
424 Failed Dependency: невыполненная зависимость
Сервер не выполнил запрос, потому что один из зависимых запросов завершился с ошибкой. Код 424 часто появляется при попытке удалить файл, который использует другой процесс.
425 Too Early: слишком рано
Сервер ожидает, что запрос будет отправлен в определённой последовательности, и не может выполнить его в полученном порядке.
426 Upgrade Required: необходимо обновление
Сервер отказывается обрабатывать запрос, потому что текущая версия протокола клиента не поддерживается. Обычно это означает, что надо обновить HTTP/1.1 до HTTP/2.
428 Precondition Required: необходимо предусловие
Сервер требует, чтобы запрос включал хотя бы одно предварительное условие, например заголовки If-Match или If-Unmodified-Since. Это нужно для предотвращения потенциальных конфликтов при одновременной работе с ресурсом.
429 Too Many Requests: слишком много запросов
Сервер отклонил запрос, потому что клиент превысил допустимый лимит запросов за заданный промежуток времени. Например, сайт перестал отвечать после множества попыток входа.
444 No Response: нет ответа
Сервер закрыл соединение с клиентом без отправки какого-либо HTTP-ответа. Этот код встречается только в веб-сервере Nginx и не входит в официальную спецификацию HTTP.
450 Blocked by Windows Parental Controls: заблокировано родительским контролем Windows
Код встречается в сервисах Microsoft и означает, что доступ к ресурсу заблокирован системой родительского контроля. Этот код используют только в экосистеме Windows.
451 Unavailable For Legal Reasons: недоступно по юридическим причинам
Сервер отклонил запрос, потому что доступ к ресурсу запрещён по юридическим причинам, например по требованию законодательства, судебного постановления или административного регламента.
Ошибки на стороне сервера — код HTTP 5хх
Коды из диапазона 5xx означают, что запрос клиента корректен, но сервер не смог его обработать из-за внутренней ошибки или временной недоступности.
500 Internal Server Error: внутренняя ошибка сервера
Это общий код, который означает, что сервер столкнулся с непредвиденной внутренней ошибкой, которая помешала ему выполнить корректный запрос клиента. Причиной могут быть ошибки в серверном коде, проблемы с подключением к базе данных, конфликты в конфигурации сервера и другие.

Читайте также:
501 Not Implemented: не выполнено
У сервера нет технической возможности выполнить запрос. Это может произойти, если запрос использует метод, который сервер не поддерживает. Например, PATCH, если сервер поддерживает только GET и POST.
502 Bad Gateway: плохой шлюз
Сервер, работающий как шлюз или прокси-сервер, получил неверный ответ от другого сервера. Это означает, что запрос передан дальше по цепочке, но ответа нет или он повреждён.
503 Service Temporarily Unavailable: сервис недоступен
Сервер временно не может обработать запрос, например, из-за перегрузки. Например, сайт доступен, но перегружен запросами или отключён для обновления. Такую ошибку иногда можно увидеть при посещении популярного новостного сайта во время пиковой нагрузки.

Читайте также:
504 Gateway Timeout: шлюз не отвечает
Сервер-шлюз или прокси не дождался ответа от вышестоящего сервера. Ошибка может возникнуть из-за проблемы с подключением к основному серверу или из-за того, что вышестоящий сервер работает слишком медленно.

Читайте также:
505 HTTP Version Not Supported: версия HTTP не поддерживается
Сервер отказывается обрабатывать запрос, потому что используемая клиентом версия протокола HTTP не поддерживается или отключена на стороне сервера. Ошибка возникает, если клиент отправил запрос с помощью HTTP/1.1, а сервер работает только с HTTP/2.
506 Variant Also Negotiates: вариант тоже проводит согласование
Сервер вошёл в бесконечный цикл при попытке выбрать подходящий вариант ресурса. Например, ошибка возникает, если сервер не может определить правильный формат ответа.
507 Insufficient Storage: переполнение хранилища
Сервер не может выполнить запрос из-за нехватки свободного пространства для хранения данных. Ошибка возникает, если диск переполнен или на сервер пытаются загрузить слишком большой файл.
508 Loop Detected: обнаружено бесконечное перенаправление
Сервер обнаружил бесконечный цикл при обработке запроса. Например, он пытается обработать рекурсивные ссылки, но не может выйти из цикла.
509 Bandwidth Limit Exceeded: исчерпана пропускная ширина канала
Сервер отклонил запрос, потому что достиг установленного лимита трафика. В таком случае клиент не сможет получить доступ к ресурсу до тех пор, пока не обновится пакет данных для расчётного периода.
Это неофициальный код. Он встречается только у хостинг-провайдеров на базе cPanel. В других системах вы его не встретите.
510 Not Extended: не расширено
Сервер не может обработать запрос, потому что ему нужны дополнительные расширения протокола HTTP, которые не указал клиент. Код нужен для работы с системами с расширенными механизмами взаимодействия: распределёнными API или кастомными HTTP-расширениями.
511 Network Authentication Required: требуется сетевая аутентификация
Клиент должен пройти аутентификацию в сети для доступа к ресурсу, например авторизоваться при подключении к Wi-Fi в кафе.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!