Ответ
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 Ответ 18+ 🔞
А, ну это ж про эти ваши циферки, которые сервер тебе в ответ плюёт! HTTP-статусы, блядь. Это типа как он с тобой разговаривает, только цифрами, без лишних слов. Слушай, тут всё просто, как три копейки, если по группам разложить.
1xx (Информационные, ёпта): Это он тебе такой: «Чувак, запрос твой получил, не выкинул, обрабатываю. Расслабься, жди». Типа «услышал тебя».
2xx (Успешные): Вот это любовь! Всё прошло, как по маслу.
- 200 OK — классика жанра. Всё заебись, просьбу твою выполнил, держи что просил.
- 201 Created — о, тут ты вообще молодец! Создал что-то новое (чаще всего после
POSTзапроса). Сервер тебе: «На, любуйся, твой ресурс готов, вот даже адресок его тебе в заголовках кину». - 204 No Content — сделал дело, гуляй смело. Обработал твой запрос (скажем, удалил что-то), но возвращать тебе в ответе нихуя не будет. Чистая работа.
3xx (Перенаправления): А тут сервер такой хитрожопый: «Иди-ка ты, дружок, на другой адресок. Не тут, а там».
- 301 Moved Permanently — переехал насовсем, забудь старый адрес, это твой новый дом.
- 302 Found / 307 Temporary Redirect — временно в отпуске, заходи в гости по другому URL.
- 304 Not Modified — а это для умных. Говорит: «С тех пор как ты последний раз спрашивал, ничего не поменялось. Зачем мне тебе одно и то же слать? Бери из своего кеша и не пизди».
4xx (Ошибки клиента): А вот это уже твои косяки, бро. Ты накосячил в запросе.
- 400 Bad Request — «Чё ты мне прислал, а? Это ж не JSON, а какая-то хуйня! Исправляй!». Синтаксическая ошибка, короче.
- 401 Unauthorized — «А ты кто такой? Давай, предъяви логин с паролем, а то не пущу». Требует аутентификации.
- 403 Forbidden — «Я-то тебя понял, кто ты. Но нет, дружок, сюда тебе нельзя. Прав не хватает». Это уже про авторизацию.
- 404 Not Found — Легенда! «Нету тут того, что ты ищешь. Может, никогда и не было». Все его любят и боятся.
- 429 Too Many Requests — «Охренел что ли? Столько запросов за раз! Иди поспи, потом приходи». Защита от DDoS, rate limiting.
5xx (Ошибки сервера): А это уже не твоя вина, а его, сервера, проблемы. Он сам обосрался.
- 500 Internal Server Error — Классика: «У меня внутри что-то пошло не так, а что — сам хуй знает. Иди нахуй».
- 502 Bad Gateway — «Я (сервер-шлюз) спросил у другого сервака, а он мне какую-то дичь в ответ прислал. Не могу тебе ничего внятного сказать».
- 503 Service Unavailable — «Всё, я перегружен, как чёрт. Или техработы идут. Заходи позже, если выживу».
- 504 Gateway Timeout — «Я ждал-ждал ответа от другого сервера, да так и не дождался. Устал. Таймаут».
Ну и как это в тестах выглядит, смотри (код не трогаю, он святой):
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
Вот, пишешь такой тест, и если сервер вместо 201 Created вдруг 500 Internal Server Error вернёт, то assert крикнет тебе прямо в ебало: «Чего бля? Ожидал 201, а получил 500!». И ты сразу понимаешь, что где-то пиздец, а не создание пользователя. Удобно, блядь!