Открыть сервис

Код состояния

Код состояния — это трёхзначное целое число, которое веб-сервер отправляет в ответ на запрос клиента (обычно браузера или поискового робота) по протоколу HTTP. Код состояния информирует о результате обработки запроса: был ли он успешно выполнен, произошла ли ошибка, или требуется дополнительное действие. Коды состояния стандартизированы в спецификациях HTTP/1.1 (RFC 7231) и более поздних версиях протокола, а их классификация основана на первой цифре числа.

История и стандартизация

Первая версия протокола HTTP (HTTP/0.9) не предусматривала кодов состояния — сервер просто возвращал запрошенные данные или ничего. В HTTP/1.0 (RFC 1945, 1996) были введены первые коды состояния, в основном трёхзначные числа, описывающие базовые сценарии: успех (200), перенаправление (302), ошибка клиента (404) и ошибка сервера (500). Дальнейшее развитие протокола в версии HTTP/1.1 (RFC 2616, 1999; затем RFC 7230–7235, 2014) значительно расширило список кодов, добавив новые классы и уточнив семантику существующих. В настоящее время поддержка кодов состояния является обязательной для любого HTTP-сервера.

Классификация по классам

Коды состояния делятся на пять классов, определяемых первой цифрой:

1xx (Информационные)

Коды 1xx информируют о том, что запрос принят и обрабатывается. Они не являются окончательными и используются редко. Основные коды:

  • 100 Continue — сервер получил заголовки запроса и предлагает клиенту продолжить отправку тела запроса.
  • 101 Switching Protocols — сервер соглашается переключиться на другой протокол (например, с HTTP на WebSocket) по запросу клиента.

2xx (Успешные)

Коды 2xx означают, что запрос был успешно получен, понят и обработан. Наиболее распространённые:

  • 200 OK — стандартный ответ на успешный запрос. Тело ответа содержит запрошенные данные.
  • 201 Created — запрос привёл к созданию нового ресурса (например, при POST-запросе).
  • 204 No Content — запрос выполнен успешно, но тело ответа пусто (например, при DELETE-запросе).

3xx (Перенаправления)

Коды 3xx указывают, что для выполнения запроса клиенту необходимо предпринять дополнительные действия, чаще всего — перейти по другому URL. Ключевые коды:

  • 301 Moved Permanently — запрашиваемый ресурс окончательно перемещён на новый URL. Браузеры и поисковые системы запоминают новый адрес.
  • 302 Found (ранее Moved Temporarily) — ресурс временно доступен по другому URL. В отличие от 301, старый адрес остаётся основным.
  • 304 Not Modified — используется для кэширования. Клиент может использовать свою локальную копию ресурса, так как с момента последнего запроса она не изменилась.

4xx (Ошибки клиента)

Коды 4xx означают, что ошибка произошла на стороне клиента: неверный синтаксис запроса, отсутствие доступа, запрос несуществующего ресурса. Самые известные:

  • 400 Bad Request — сервер не может обработать запрос из-за синтаксической ошибки (например, неверно сформированный JSON).
  • 401 Unauthorized — для доступа к ресурсу требуется аутентификация. В ответе обычно указывается метод аутентификации.
  • 403 Forbidden — сервер понял запрос, но отказывается его выполнять (например, недостаточно прав).
  • 404 Not Found — запрашиваемый ресурс не найден на сервере. Самый узнаваемый код ошибки в интернете.
  • 429 Too Many Requests — клиент превысил лимит запросов за единицу времени (rate limiting).

5xx (Ошибки сервера)

Коды 5xx сигнализируют о том, что сервер не смог выполнить запрос по своей вине: из-за перегрузки, временной неисправности или внутренней ошибки. Основные коды:

  • 500 Internal Server Error — общая ошибка сервера, когда причина не уточняется.
  • 502 Bad Gateway — сервер (например, nginx) получил неверный ответ от вышестоящего сервера (например, от PHP-FPM).
  • 503 Service Unavailable — сервер временно не может обработать запрос из-за перегрузки или технических работ.
  • 504 Gateway Timeout — сервер не дождался ответа от вышестоящего сервера в установленное время.

Структура ответа с кодом состояния

HTTP-ответ состоит из трёх частей: строки состояния, заголовков и тела. Строка состояния включает версию протокола, код состояния и текстовую фразу (reason phrase), поясняющую код. Например: HTTP/1.1 200 OK. Текстовая фраза не является обязательной для понимания — её назначение — человекочитаемое описание.

Применение в веб-разработке

Коды состояния широко используются для диагностики и управления поведением клиентов:

  • Поисковая оптимизация (SEO). Код 301 используется для склейки доменов и перенаправления трафика на основной адрес. Код 404 может привести к удалению страницы из индекса, если не настроено перенаправление.
  • Кэширование. Код 304 позволяет браузерам и прокси-серверам использовать локальные копии, снижая нагрузку на сервер.
  • API. RESTful API активно используют коды состояния: 200 для успешных GET-запросов, 201 для создания ресурсов, 400 для неверных входных данных, 401/403 для проблем с авторизацией, 500 для внутренних ошибок.
  • Обработка ошибок. Разработчики настраивают кастомные страницы для кодов 404, 403, 500, чтобы улучшить пользовательский опыт.

Нестандартные и расширенные коды

Некоторые серверы и сервисы вводят собственные коды состояния, не входящие в стандарт. Например, nginx использует код 444 для закрытия соединения без ответа, а Cloudflare — 520 (Unknown Error), 521 (Web Server Is Down) и другие. Также существуют расширения стандарта, такие как коды состояния WebDAV (например, 207 Multi-Status для коллекций ресурсов).

Критика и ограничения

Хотя система кодов состояния универсальна, она имеет недостатки:

  • Избыточность. Для многих сценариев достаточно 5–10 кодов, но их количество превышает 60, что может запутывать разработчиков.
  • Неоднозначность. Один и тот же код может использоваться в разных контекстах. Например, 403 может означать как «доступ запрещён», так и «требуется аутентификация» (при отсутствии заголовка WWW-Authenticate).
  • Отсутствие детализации. Код 500 скрывает истинную причину ошибки, что затрудняет отладку. Для решения этой проблемы в ответах API часто добавляют расширенное описание в теле ответа.

Источники

  • RFC 7231 — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content (2014)
  • RFC 7235 — Hypertext Transfer Protocol (HTTP/1.1): Authentication (2014)
  • RFC 7540 — Hypertext Transfer Protocol Version 2 (HTTP/2) (2015)
  • «HTTP: The Definitive Guide» by David Gourley, Brian Totty (O'Reilly Media, 2002)
  • Документация nginx и Apache HTTP Server (официальные сайты)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →