Коды состояния 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 →