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

Ответ

Ошибки клиента обозначаются статус-кодами класса 4xx. Сервер указывает, что проблема в запросе.

Основные коды:

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

Пример ответа API с кодом 400:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Missing required field: 'email'"
  }
}

Почему это важно: Корректные 4xx коды помогают клиенту понять, как исправить запрос, в отличие от 5xx кодов, которые указывают на внутреннюю ошибку сервера.

Ответ 18+ 🔞

Ну слушай, давай разберём эту весёлую классификацию, когда сервер тебе вежливо намекает: "Чувак, это ты накосячил, а не я". Это вот эти самые 4xx коды, они все про клиентские косяки.

Представь, ты приходишь в банк и пытаешься снять деньги, тыкая в терминал палкой от швабры. Банк не сломается, он просто скажет: "Извините, но ваша операция не может быть выполнена". Вот это и есть 4xx.

Основные перлы, которые ты чаще всего встретишь:

  • 400 Bad Request — это когда ты присылаешь серверу какую-то ахинею. Типа в поле "дата рождения" пишешь "вчера", а он ждёт 2023-12-31. Или JSON кривой, с запятой лишней. Сервер смотрит на это и думает: "Ну ты даёшь, блядь, это ж читать невозможно!".
  • 401 Unauthorized — "Предъяви документики". Ты просто пришёл, а тебя спрашивают логин-пароль или токен. Не предъявил — иди нахуй, кто ты такой?
  • 403 Forbidden — вот это уже интереснее. Ты вроде свой, предъявил пропуск (токен), зашёл в здание. Но пытаешься открыть дверь в серверную с надписью "ТОЛЬКО ДЛЯ АДМИНОВ". Тебе вежливо, но твёрдо: "Сюда нельзя, дружок-пирожок". Доступ есть, а прав — нихуя.
  • 404 Not Found — классика жанра, "страница не найдена". Ты просишь у сервера /api/v1/unicorns, а он тебе: "Бля, ну нету у меня единорогов, все сбежали! Ищи в другом месте". Самый частый гость.
  • 429 Too Many Requests — "Успокойся, ебушки-воробушки!". Ты так задолбал сервер запросами, что он тебя на время блокирует. Rate limiting, ёпта. Не дрочи endpoint, как сумасшедший.

Вот, смотри, как выглядит вежливый, но уничижительный ответ, когда ты налажал с запросом:

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Missing required field: 'email'"
  }
}

Перевод: "Чувак, ты забыл указать почту, волнение ебать. Исправь и приходи снова".

А в чём, собственно, соль? Важность в том, чтобы не путать эти коды с 5xx (ошибки сервера). Если прилетело 4xx — проблема у тебя, в твоём запросе или правах. Исправляй свой код и живи спокойно. Если же 5xx — это уже сервер обосрался, и тут ты мало что можешь сделать, кроме как материться и писать в саппорт. Чёткое разделение — залог ахуенного дебага и спокойной жизни.