Ответ
HTTP-статус коды указывают на результат обработки запроса сервером. Группируются по первой цифре.
1xx (Информационные): Запрос принят, обработка продолжается.
2xx (Успешные): Запрос успешно обработан.
- 200 OK — стандартный ответ для успешных GET, POST, PUT или DELETE запросов.
- 201 Created — запрос привел к созданию нового ресурса (часто после POST).
- 204 No Content — сервер успешно обработал запрос, но не возвращает содержимого (например, после DELETE).
3xx (Перенаправления): Для завершения запроса требуется дополнительное действие (обычно — новый запрос).
- 301 Moved Permanently — ресурс навсегда перемещен по новому URL.
- 302 Found / 307 Temporary Redirect — ресурс временно доступен по другому адресу.
- 304 Not Modified — используется для кеширования; контент не изменился с момента последнего запроса.
4xx (Ошибки клиента): Запрос содержит ошибку или не может быть выполнен.
- 400 Bad Request — сервер не может обработать запрос из-за синтаксической ошибки (например, неверный JSON).
- 401 Unauthorized — для доступа требуется аутентификация (логин/пароль).
- 403 Forbidden — сервер понял запрос, но отказывается его авторизовать (прав недостаточно).
- 404 Not Found — сервер не нашел запрашиваемый ресурс.
- 429 Too Many Requests — клиент отправил слишком много запросов за короткое время (Rate Limiting).
5xx (Ошибки сервера): Сервер не смог выполнить корректный запрос.
- 500 Internal Server Error — общая ошибка сервера без конкретных деталей.
- 502 Bad Gateway — сервер, выступая в роли шлюза или прокси, получил недопустимый ответ от вышестоящего сервера.
- 503 Service Unavailable — сервер временно не может обработать запрос (перегрузка, техобслуживание).
- 504 Gateway Timeout — сервер-шлюз не дождался ответа от вышестоящего сервера.
Пример проверки в автотесте (Python, requests):
import requests
response = requests.post('https://api.example.com/users', json={'name': 'John'})
# Проверяем, что пользователь создан
assert response.status_code == 201, f'Expected 201, got {response.status_code}'
# Проверяем наличие заголовка с локацией нового ресурса
assert 'Location' in response.headers