Что означает HTTP статус-код 400 (Bad Request)?

Ответ

HTTP статус-код 400 Bad Request указывает, что сервер не может (или отказывается) обработать клиентский запрос из-за ошибки, которая воспринимается как вина клиента (client error).

Типичные причины:

  • Неверный синтаксис запроса (например, некорректный JSON или XML в теле).
  • Отсутствие обязательных параметров или заголовков.
  • Неподдерживаемый метод запроса для данного URL.
  • Превышение допустимого размера запроса.
  • Несоответствие типа данных (например, передача числа вместо строки).

Пример сценария и ответа: Запрос:

POST /api/users HTTP/1.1
Content-Type: application/json

{
    "name": "Alice",
    "email": "not-an-email", // Некорректный формат email
    "age": "twenty-five"     // Ожидается число, передана строка
}

Ответ сервера:

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

{
    "error": "Validation failed",
    "details": [
        "Field 'email' must be a valid email address",
        "Field 'age' must be a number"
    ]
}

Что проверять в тестах: валидацию всех входных параметров, форматы данных (JSON, XML), обязательные поля и корректность заголовков (например, Content-Type).

Ответ 18+ 🔞

А, слушай, вот эта хуйня — 400 Bad Request. Это когда сервер смотрит на твой запрос, морщится и говорит: «Ну ты, блядь, совсем? Что за пиздопроебина у тебя в руках?»

Короче, это твоя вина, чувак. Ты отправил какую-то дичь, а сервер её жрать не стал. Как будто ты в ресторан пришёл и заказал «суп с гвоздями и компот из носков». Тебе вежливо так: «Извините, шеф отказывается это готовить».

На что обычно сервер охуевает и посылает тебя нахуй:

  • Синтаксис кривой. Ты в JSON'е запятую потерял или скобку не закрыл. Сервер парсит это и у него волосы дыбом: «Что это за хуйня? Это не JSON, это бред сивой кобылы!»
  • Чего-то не хватает. Забыл обязательный параметр передать, заголовок Content-Type не поставил. Сервер ждёт, ждёт, а потом: «Ну и где, блядь, твои данные? Я что, телепат?»
  • Метод не тот. Пытаешься DELETE отправить на URL, который только для GET. Сервер в ответ: «Ты чё, охренел? Здесь так не принято!»
  • Размер не тот. Отправил файл размером с Библиотеку Конгресса, когда лимит — 10 МБ. «Овердохуища, братан, убавь!»
  • Тип данных — пиздец. Ожидалось число, а ты строку «двадцать пять» прислал. Или в поле email написал «я_крутой_чел@жопа». Сервер смотрит и думает: «Э, бошка, думай! Это же ебать не email!»

Вот, смотри, как это выглядит вживую:

Твой кривой запрос:

POST /api/users HTTP/1.1
Content-Type: application/json

{
    "name": "Alice",
    "email": "not-an-email", // Это ж не почта, это просто строка какая-то, блядь
    "age": "twenty-five"     // А тут вместо цифры — буквы! Сервер в ахуе!
}

Ответ сервера (вежливый, но с подтекстом «иди учи матчасть»):

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

{
    "error": "Validation failed",
    "details": [
        "Field 'email' must be a valid email address",
        "Field 'age' must be a number"
    ]
}

Так что, когда пишешь тесты, проверяй эту всю муть:

  1. Валидацию. Все поля, которые обязательны, — шли. Все, которые не обязательны, — тоже проверь, что не сломается, если их нет.
  2. Форматы. JSON должен быть идеальным, XML — валидным. Никаких лишних пробелов, кавычек ебаных левых.
  3. Заголовки. Особенно Content-Type. Если шлёшь JSON, так и пиши application/json, а не text/plain, а то сервер тебя не поймёт и вышлет в пизду.
  4. Типы данных. Числа — числами, булевы значения — true/false, а не «да»/«нет».

Запомни: 400 — это как красная лампочка «Ты — мудак». Исправляй запрос и шли заново.