На какие группы делятся HTTP коды состояния (Status Codes)?

«На какие группы делятся HTTP коды состояния (Status Codes)?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HTTP коды состояния стандартизированы RFC и делятся на пять классов по первой цифре. Понимание этих групп критически важно для разработки корректных API и обработки ошибок.

1xx: Informational (Информационные) Запрос получен, и процесс продолжается. В веб-разработке на PHP встречаются редко.

  • Пример: 100 Continue — сервер готов принять тело запроса. Полезно при отправке больших данных.

2xx: Success (Успешные) Запрос успешно получен, понят и принят.

  • 200 OK: Стандартный ответ для успешных GET, PUT, PATCH запросов.
  • 201 Created: Запрос привел к созданию нового ресурса (успешный POST). В ответе должен быть заголовок Location с URI нового ресурса.
  • 204 No Content: Сервер успешно обработал запрос, но не возвращает никакого контента (успешный DELETE).

3xx: Redirection (Перенаправление) Для завершения запроса требуется дополнительное действие со стороны клиента.

  • 301 Moved Permanently: Ресурс навсегда перемещен на новый URI.
  • 302 Found (ранее Moved Temporarily): Ресурс временно доступен по другому URI.
  • 304 Not Modified: Используется для кеширования. Сервер сообщает клиенту, что ресурс не изменился с момента последнего запроса (проверяется по заголовкам If-Modified-Since или ETag).

4xx: Client Error (Ошибка клиента) Запрос содержит синтаксическую ошибку или не может быть выполнен.

  • 400 Bad Request: Общая ошибка из-за неверного синтаксиса запроса (например, некорректный JSON в теле).
  • 401 Unauthorized: Требуется аутентификация для доступа к ресурсу.
  • 403 Forbidden: Сервер понял запрос, но отказывается его авторизовать (нет прав).
  • 404 Not Found: Сервер не нашел запрашиваемый ресурс.
  • 422 Unprocessable Entity (WebDAV): Запрос семантически корректен, но содержит логические ошибки (например, ошибки валидации полей). Часто используется в REST API.

5xx: Server Error (Ошибка сервера) Сервер не смог выполнить корректный запрос.

  • 500 Internal Server Error: Общая ошибка сервера, когда более конкретный код 5xx не подходит.
  • 502 Bad Gateway: Сервер, выступая в роли шлюза или прокси, получил недействительный ответ от вышестоящего сервера.
  • 503 Service Unavailable: Сервер временно не может обработать запрос из-за перегрузки или технического обслуживания.

Пример обработки в PHP:

// Установка кода ответа
http_response_code(404);
// Или в рамках фреймворка, например, Symfony Response:
return new Response('Not Found', Response::HTTP_NOT_FOUND);

// Проверка кода для логирования ошибок клиента
$status = http_response_code();
if ($status >= 400 && $status < 500) {
    $logger->warning('Client error', ['code' => $status]);
}