← Назад к вопросам

Какие знаешь группы кодов ответа?

1.0 Junior🔥 161 комментариев
#API и веб-протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Группы кодов состояния HTTP

Коды состояния HTTP (HTTP Status Codes) — это стандартизированные трехзначные числа, которые сервер отправляет клиенту (например, браузеру или API-клиенту) в ответ на его запрос. Они сгруппированы по первой цифре, которая определяет класс ответа. Всего существует пять основных групп, каждая из которых описывает определенную категорию ответов. Понимание этих групп критически важно для backend-разработчика, так как позволяет правильно проектировать API, обрабатывать ошибки и обеспечивать корректную коммуникацию между клиентом и сервером.

1. Информационные коды (1xx — Informational)

Эти коды указывают на то, что запрос принят и обработка продолжается. Они являются промежуточными ответами, и клиент обычно не видит их напрямую. В современной веб-разработке они используются реже, в основном в контексте протоколов вроде WebSocket или специализированных длительных операций.

Примеры:

  • 100 Continue: Сервер получил заголовки запроса и клиент может продолжать отправлять тело запроса. Часто используется при отправке больших данных (например, загрузка файлов).
  • 101 Switching Protocols: Сервер соглашается сменить протокол, как запросил клиент (например, переход с HTTP/1.1 на WebSocket).

2. Коды успеха (2xx — Success)

Эта группа означает, что запрос был успешно получен, понят и обработан. Это желательный исход для большинства операций.

Наиболее важные примеры:

  • 200 OK: Стандартный ответ на успешные запросы (GET, POST, PUT, DELETE). Тело ответа содержит запрошенные данные или результат операции.
// Пример в PHP: Успешный ответ с данными в JSON (типично для REST API)
http_response_code(200);
header('Content-Type: application/json');
echo json_encode(['id' => 42, 'name' => 'Новый товар']);
  • 201 Created: Запрос успешен и в результате был создан новый ресурс (чаще всего в ответ на POST). Ответ должен содержать заголовок Location с URI нового ресурса.
  • 204 No Content: Сервер успешно обработал запрос, но не возвращает никакого контента в теле ответа. Часто используется для успешных DELETE-запросов или обновлений (PUT), где не требуется отправлять данные обратно.

3. Коды перенаправления (3xx — Redirection)

Эти коды указывают клиенту, что для завершения запроса необходимо предпринять дополнительные действия, обычно — выполнить новый запрос по другому адресу.

Ключевые примеры:

  • 301 Moved Permanently: Запрашиваемый ресурс был навсегда перемещен на новый URI. Все последующие запросы должны использовать новый адрес. Важен для SEO.
  • 302 Found (или 307 Temporary Redirect): Ресурс временно доступен по другому URI. Клиент должен использовать исходный URI для будущих запросов.
  • 304 Not Modified: Используется для кэширования. Сервер сообщает клиенту, что запрошенный ресурс не изменился с момента последнего запроса (определяется по заголовкам If-Modified-Since или If-None-Match). Клиент должен использовать закэшированную версию.

4. Коды ошибок клиента (4xx — Client Error)

Коды этой группы означают, что ошибка возникла на стороне клиента. Запрос содержит некорректный синтаксис, не может быть выполнен или ему не хватает прав. Это одна из самых важных групп для отладки и обеспечения качества API.

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

  • 400 Bad Request: Сервер не может обработать запрос из-за некорректного синтаксиса (например, невалидный JSON в теле POST-запроса).
// Пример: Валидация входных данных и возврат 400
$data = json_decode(file_get_contents('php://input'), true);
if (!isset($data['email']) || !filter_var($data['email'], FILTER_VALIDATE_EMAIL)) {
    http_response_code(400);
    echo json_encode(['error' => 'Некорректный email адрес']);
    exit;
}
  • 401 Unauthorized: Запрос требует аутентификации пользователя. Клиент должен предоставить валидные учетные данные (например, через заголовок Authorization).
  • 403 Forbidden: Сервер понял запрос, но отказывается его авторизовать. В отличие от 401, аутентификация не поможет, если у пользователя недостаточно прав.
  • 404 Not Found: Самый известный код. Сервер не может найти запрошенный ресурс. Возникает при обращении к несуществующему URL или ID сущности.
  • 429 Too Many Requests: Клиент отправил слишком много запросов за короткое время (реализация rate limiting).

5. Коды ошибок сервера (5xx — Server Error)

Эта группа указывает на то, что сервер не смог выполнить корректный запрос из-за внутренней ошибки. Проблема не на стороне клиента. Для разработчика это сигнал о критических сбоях в логике приложения, конфигурации или инфраструктуре.

Основные коды:

  • 500 Internal Server Error: Общий код на случай непредвиденных ошибок сервера, когда более конкретный код не подходит. Частая причина — неотловленное исключение (exception) в коде.
  • 502 Bad Gateway: Сервер, выступая в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера. Характерен для проблем с балансировщиками нагрузки или внешними API.
  • 503 Service Unavailable: Сервер временно не может обрабатывать запросы из-за перегрузки или технического обслуживания. Ответ может включать заголовок Retry-After с указанием, когда повторить запрос.
  • 504 Gateway Timeout: Сервер, действуя как шлюз или прокси, не дождался ответа от вышестоящего сервера в отведенное время.

Важность для Backend-разработки: Грамотное использование кодов ответа — это основа проектирования RESTful API и отказоустойчивых систем. Например, выбор между 400 и 422 (Unprocessable Entity) для ошибок валидации данных, или между 401 и 403 для систем аутентификации/авторизации, напрямую влияет на то, как клиентское приложение будет обрабатывать ошибки. В PHP для отправки кода состояния используется функция http_response_code(), но в современных фреймворках (Laravel, Symfony) это обычно делается через исключения или специальные объекты ответа.