Какие основные классы и коды состояния HTTP вы знаете?

Ответ

Коды состояния HTTP (Status Codes) — трехзначные числа, которые сервер возвращает в ответ на клиентский запрос. Они сгруппированы в 5 классов, определяемых первой цифрой.

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

  • 100 Continue – клиент может продолжать отправлять тело запроса.
  • 101 Switching Protocols – сервер согласен сменить протокол (например, на WebSocket).

2xx: Успешные (Success) Запрос успешно обработан.

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

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

  • 301 Moved Permanently – ресурс навсегда перемещен на новый URI.
  • 302 Found – ресурс временно доступен по другому URI.
  • 304 Not Modified – используется для кэширования. Клиент уже имеет актуальную версию ресурса (ответ без тела).

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

  • 400 Bad Request – сервер не может понять запрос из-за неверного синтаксиса (например, некорректный JSON).
  • 401 Unauthorized – для доступа требуется аутентификация (клиент не представил учетные данные).
  • 403 Forbidden – сервер понял запрос, но отказывается его авторизовать (прав недостаточно).
  • 404 Not Found – сервер не нашел запрашиваемый ресурс.
  • 429 Too Many Requests – клиент отправил слишком много запросов за короткое время (rate limiting).

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

  • 500 Internal Server Error – общая ошибка сервера без конкретных деталей.
  • 502 Bad Gateway – сервер, действуя как шлюз или прокси, получил недействительный ответ от вышестоящего сервера.
  • 503 Service Unavailable – сервер временно не может обработать запрос (перегрузка, техобслуживание).
  • 504 Gateway Timeout – сервер, действуя как шлюз или прокси, не дождался ответа от вышестоящего сервера.

Пример проверки в автотесте (Python):

import requests
# Проверка успешного создания
response = requests.post("https://api.example.com/items", json={...})
assert response.status_code == 201, f"Expected 201, got {response.status_code}"
# Проверка обработки ошибки
response = requests.get("https://api.example.com/items/99999")
assert response.status_code == 404, "Resource should not be found"

Ответ 18+ 🔞

А, ну вот, слушай, про эти ваши HTTP-статусы. Это ж, блядь, как азбука Морзе для интернета, только цифрами. Три циферки, которые сервер тебе в ответ плюёт, и по ним сразу ясно — то ли ты молодец, то ли иди нахуй.

1xx: Информационные (Informational) Это типа «я тебя услышал, не перебивай, думаю». Сервер такой: «Да-да, я тут, не ори, ща всё будет».

  • 100 Continue – «Ну вали дальше своё тело запроса, я слушаю». Типа дал добро на отправку большого файла.
  • 101 Switching Protocols – «Ага, давай на другом языке потрещим». Например, переключились с HTTP на WebSocket, чтобы чатик работал.

2xx: Успешные (Success) Вот это лафа! Всё прошло, как по маслу. Сервер доволен, ты доволен.

  • 200 OK – Классика, ебать. Запрос выполнен, держи свои данные и иди с миром. Для GET, PUT обычно.
  • 201 Created – Во, красота! Ты там что-то создал (POST-запрос, например), и сервер тебе говорит: «Молодец, мудила, вот тебе ссылочка на твоё новое творение». В заголовке Location адресок лежит.
  • 204 No Content – Всё сделал, но нихуя тебе не верну. Типа «запрос выполнен, но иди нахуй, смотреть тут не на что». После DELETE или какого-нибудь POST, который просто должен сработать.

3xx: Перенаправления (Redirection) А тут начинается цирк. Сервер такой хитрожопый: «Не тут, дружок, ищи в другом месте».

  • 301 Moved Permanently – Ресурс переехал навсегда. Запомни новый адрес и больше не приставай со старым.
  • 302 Found – Ресурс временно тусуется по другому адресу. Зайди туда, но потом опять проверяй тут.
  • 304 Not Modified – Экономия трафика, мать его. У тебя в кэше уже самая свежая версия страницы, так что я тебе даже тело ответа слать не буду. Сиди на своей старой.

4xx: Ошибки клиента (Client Error) А вот это уже твои косяки, чувак. Ты накосячил, а сервер тебе вежливо (или не очень) на это указывает.

  • 400 Bad Request – «Чё ты мне прислал, долбоёб? Я эту абракадабру не понимаю». Обычно кривой JSON или ещё какая-то хуйня в запросе.
  • 401 Unauthorized – «А ты кто такой? Сначала представься!». Требует логин-пароль или токен, а ты их не прислал.
  • 403 Forbidden – «Я-то тебя понял, но доступа тебе, пидору, нет». Права не те. Можешь хоть обоссаться — не пущу.
  • 404 Not Found – Легенда! «Ты че, слепой? Такой страницы у меня нет!» Самый популярный статус для всех, кто тыкает не туда.
  • 429 Too Many Requests – «Охуел, что ли? Слишком много запросов за раз шлёшь! Успокойся, подожди». Это rate limiting, защита от ддоса.

5xx: Ошибки сервера (Server Error) А вот это уже пиздец на нашей стороне. Мы, сервера, обосрались. Запрос-то у тебя был нормальный, а мы него не смогли.

  • 500 Internal Server Error – Классика жанра. «У нас тут хуйня произошла, но какая — тебе, клиенту, не положено знать». Общая ошибка, когда всё пошло по пизде.
  • 502 Bad Gateway – «Я (шлюз/прокси) спросил у другого сервака, а он мне какую-то дичь в ответ прислал». Непонятный ответ от upstream-сервера.
  • 503 Service Unavailable – «Всё упало, всех выгнали, мы на техработах или просто перегружены до охуения». Попробуй позже.
  • 504 Gateway Timeout – «Я ждал-ждал ответа от другого сервака, да так и не дождался». Таймаут, епта.

Пример проверки в автотесте (Python): Смотри, как в коде это выглядит. Всё просто, как три копейки.

import requests
# Проверка успешного создания
response = requests.post("https://api.example.com/items", json={...})
assert response.status_code == 201, f"Expected 201, got {response.status_code}"
# Проверка обработки ошибки
response = requests.get("https://api.example.com/items/99999")
assert response.status_code == 404, "Resource should not be found"

Вот и вся магия. Запомни главное: 2xx — ты красава, 4xx — ты мудак, 5xx — мудаки мы. Держи эту схему в голове, и пол-интернета станет понятнее.