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

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

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

Классификация

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

  • 1xx (Informational) — информационные. Запрос принят, обработка продолжается. Используются редко, в основном для протокола WebSocket или при длительной обработке.
  • 2xx (Success) — успешные. Запрос успешно получен, понят и обработан.
  • 3xx (Redirection) — перенаправления. Для завершения запроса клиенту необходимо выполнить дополнительное действие, чаще всего — перейти по другому URL.
  • 4xx (Client Error) — ошибки клиента. Запрос содержит некорректные данные (например, синтаксическую ошибку, неверный путь или недостаток прав).
  • 5xx (Server Error) — ошибки сервера. Сервер не смог обработать корректный запрос из-за внутренней проблемы.

Вторая и третья цифры уточняют конкретную ситуацию в рамках класса.

Наиболее распространённые коды

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

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

2xx — Успешные

  • 200 OK — стандартный ответ об успешном выполнении запроса. Для GET — тело ответа содержит запрошенный ресурс; для POST — результат обработки данных.
  • 201 Created — запрос выполнен, в результате создан новый ресурс (например, при добавлении записи в базу данных). Ответ обычно содержит заголовок Location с URL нового ресурса.
  • 202 Accepted — запрос принят в обработку, но результат ещё не готов (асинхронная обработка). Тело ответа может содержать статус выполнения.
  • 204 No Content — запрос выполнен успешно, но тело ответа пустое. Часто используется для запросов DELETE или для обновления данных без возврата содержимого.

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

  • 301 Moved Permanently — запрошенный ресурс окончательно перемещён на новый URL. Клиент должен обновить ссылки в закладках. Поисковые системы передают вес страницы новому адресу.
  • 302 Found — ресурс временно находится по другому URL. Клиент использует старый URL для последующих запросов.
  • 304 Not Modified — ответ на условный запрос (с заголовками If-Modified-Since или If-None-Match). Сервер сообщает, что ресурс не изменился, и клиент может использовать свою кэшированную версию. Тело ответа пустое.
  • 307 Temporary Redirect — аналогичен 302, но клиент обязан сохранить метод запроса (например, POST не должен меняться на GET).
  • 308 Permanent Redirect — аналог 301 с обязательным сохранением метода запроса.

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

  • 400 Bad Request — сервер не может обработать запрос из-за синтаксической ошибки (например, некорректный JSON, неверный формат даты).
  • 401 Unauthorized — для доступа к ресурсу требуется аутентификация. Ответ содержит заголовок WWW-Authenticate с указанием типа аутентификации.
  • 403 Forbidden — сервер понял запрос, но отказывается его выполнять. Аутентификация не помогает (например, нет прав на чтение файла). Часто используется для защиты от доступа к системным каталогам.
  • 404 Not Found — запрошенный ресурс не найден на сервере. Один из самых известных кодов. Может возвращаться как для несуществующих страниц, так и для скрытия существующих (например, при попытке угадать URL).
  • 405 Method Not Allowed — HTTP-метод (GET, POST, PUT, DELETE) не поддерживается для данного URL. Ответ содержит заголовок Allow с перечнем разрешённых методов.
  • 408 Request Timeout — клиент не отправил запрос полностью за время ожидания сервера.
  • 409 Conflict — запрос не может быть выполнен из-за конфликта с текущим состоянием ресурса (например, попытка создать дублирующуюся запись).
  • 410 Gone — ресурс был удалён навсегда, и сервер не знает нового адреса. Отличается от 404 указанием на преднамеренное удаление.
  • 413 Payload Too Large — тело запроса превышает допустимый размер, установленный сервером.
  • 429 Too Many Requests — клиент превысил лимит запросов за единицу времени (rate limiting). Ответ может содержать заголовок Retry-After с указанием времени ожидания.
  • 451 Unavailable For Legal Reasons — ресурс недоступен по юридическим причинам (например, блокировка по решению суда). Код введён в RFC 7725.

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

  • 500 Internal Server Error — общая ошибка сервера, когда нет более точного кода. Возникает при сбоях в приложении, ошибках в скриптах, проблемах с базой данных.
  • 502 Bad Gateway — сервер (шлюз или прокси) получил некорректный ответ от вышестоящего сервера (например, от сервера приложений).
  • 503 Service Unavailable — сервер временно не может обработать запрос (например, из-за перегрузки или технического обслуживания). Рекомендуется указывать заголовок Retry-After.
  • 504 Gateway Timeout — сервер (шлюз) не дождался ответа от вышестоящего сервера за отведённое время.
  • 511 Network Authentication Required — клиент должен пройти аутентификацию в сети (например, ввести пароль на Wi-Fi-точке доступа).

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

Некоторые серверы и сервисы вводят собственные коды, не входящие в стандарт HTTP. Например:

  • 440 Login Time-out (Microsoft IIS) — истекло время сессии.
  • 449 Retry With (Microsoft IIS) — запрос должен быть повторен с дополнительными данными.
  • 498 Invalid Token (ArcGIS) — недействительный токен аутентификации.
  • 499 Token Required (ArcGIS) — токен не предоставлен.

Такие коды не являются обязательными для поддержки и могут различаться в зависимости от реализации.

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

Коды состояния HTTP являются основой взаимодействия клиент-сервер в интернете. Разработчики веб-приложений и API обязаны корректно возвращать соответствующие коды, чтобы клиент (браузер, мобильное приложение, другой сервер) мог адекватно обработать ответ. Поисковые системы (Google, Яндекс) учитывают коды 3xx при индексации страниц, а коды 4xx и 5xx влияют на ранжирование и поведение роботов.

  • 301 используется для постоянных редиректов (смена домена, объединение сайтов).
  • 302 — для временных редиректов (технические работы, A/B-тестирование).
  • 404 — для страниц, которых больше не существует, с возможностью предложить пользователю похожие материалы.
  • 500 — сигнал для администратора о необходимости проверить логи сервера.
  • 429 — обязателен для API с ограничением частоты запросов.

Интересные факты

  • Код 418 I'm a Teapot (я — чайник) — шуточный код, определённый в RFC 2324 (Hyper Text Coffee Pot Control Protocol). Используется в пасхалках и тестировании. Формально не является стандартным HTTP-кодом.
  • Код 451 назван в честь романа Рэя Брэдбери «451 градус по Фаренгейту», где книги сжигались из-за цензуры.
  • Некоторые веб-серверы (например, Nginx) могут возвращать код 444 (Connection Closed Without Response) — нестандартный код для разрыва соединения без отправки ответа, используется для блокировки вредоносных запросов.
  • Код 200 часто используется ошибочно вместо 201 или 204, что может привести к некорректной обработке на стороне клиента.

Источники

  • RFC 7231 — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content
  • RFC 7230 — Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
  • RFC 6585 — Additional HTTP Status Codes
  • RFC 7725 — An HTTP Status Code to Report Legal Obstacles
  • Документация веб-серверов Apache, Nginx, Microsoft IIS

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

На главную BFOmetr →