Какие основные HTTP-статус коды вы знаете и что они означают?

Ответ

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!». И ты сразу понимаешь, что где-то пиздец, а не создание пользователя. Удобно, блядь!