Ответ
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]);
}