Gernar
Frontend DeveloperHTTP, API и сеть

Интервью-вопрос

Что такое body

Body - это тело HTTP-запроса или ответа, где передаются данные. Для фронтенда важно не только знать определение, но и правильно отправлять payload, читать ответ и не ломать UI на пустом или повторно прочитанном теле.

Добавлен
Редакция

Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.

🐰0
🥚0

Мини-квиз

Проверка перед разбором

Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.

Вопрос 1 из 50 правильно

Как лучше коротко объяснить body на интервью?

Вы отвечаете на базовый вопрос про HTTP и хотите звучать точно, но без лишней лекции.

Варианты ответа

Разбор

Разобраться, а не зазубрить

Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.

Базовая идея

Body - это часть HTTP-сообщения, в которой передаются данные. У HTTP-сообщения есть стартовая строка, заголовки и опциональное тело. URL, HTTP-метод, статус и headers не являются body.

В запросе body отвечает на вопрос: какие данные клиент отправляет серверу. В ответе body отвечает на вопрос: какие данные сервер вернул клиенту. Для frontend-разработчика это напрямую связано с API-запросами, формами, загрузкой файлов и парсингом ответа.

Не говорите, что body есть всегда. У многих запросов и ответов тело может отсутствовать. Например, GET обычно передает параметры в URL, а ответ 204 No Content успешен именно без body.

Как это сказать на интервью

Хороший короткий ответ можно дать так:

Body - это полезная нагрузка HTTP-запроса или ответа. В запросе через body отправляют данные на сервер, например JSON или форму. В ответе из body читают данные сервера, например JSON. Формат тела должен совпадать с Content-Type, а в fetch тело ответа нельзя читать несколько раз.

Такая формулировка показывает не только знание термина, но и практику. Вы сразу закрываете API, заголовки, методы парсинга и типичную ловушку с повторным чтением response body.

Body в запросе

Когда фронтенд отправляет данные, body задается в параметрах запроса. Для JSON важно передать строку, а не обычный объект.

await fetch('/api/users', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ name: 'Anna', role: 'editor' }),
});

Плохой вариант - передать объект напрямую в body. Fetch не превратит его в JSON так, как вы ожидаете. Сервер может получить строку [object Object] или не разобрать данные. Для UI это часто выглядит так: форма отправилась, но запись не создалась или создалась с пустыми полями. Надежнее явно сериализовать объект через JSON.stringify(), указать ожидаемый Content-Type и обработать ошибку сервера.

// Плохо: обычный объект не сериализуется в JSON автоматически
await fetch('/api/users', {
  method: 'POST',
  body: { name: 'Anna' },
});

Как решить, что класть в body

1Вы передаете фильтры для получения списка?
Обычно используйте query string в GET. Так запрос понятнее, лучше кэшируется и стабильнее проходит через инфраструктуру.
2Вы создаете или меняете данные?
Используйте POST, PUT или PATCH. Payload кладите в body в формате, который ожидает API.
3Вы отправляете файлы или форму?
Используйте FormData и не задавайте multipart Content-Type вручную.
4Ответ может быть пустым?
Сначала проверьте статус и тип ответа. Потом выбирайте json(), text() или отсутствие парсинга.

Body в ответе

Ответ сервера тоже может иметь body. Во фронтенде вы обычно читаете его через методы объекта Response: json(), text(), blob(), arrayBuffer() или работаете с потоком.

const response = await fetch('/api/profile');

if (!response.ok) {
  throw new Error('Request failed');
}

const profile = await response.json();

Здесь есть два риска. Первый: тело можно прочитать один раз. Второй: успешный ответ не гарантирует, что тело есть и что оно является JSON. Если не учесть это, экран может показать общую ошибку вместо успешного удаления или потерять полезное сообщение backend. Поэтому в надежном коде учитывайте статус и контракт API.

Безопасно
  1. 1Проверить response.ok и статус
  2. 2Посмотреть Content-Type или контракт API
  3. 3Выбрать один способ чтения body
  4. 4Обработать пустой ответ без падения UI
Опасно
  1. 1Сразу вызвать response.json()
  2. 2Не проверить 204 или пустое тело
  3. 3Попробовать прочитать body второй раз
  4. 4Показать пользователю общую ошибку без причины

Content-Type и формат тела

Content-Type описывает формат body. Если вы отправляете JSON, сервер обычно ждет application/json. Если отправляете обычную HTML-форму, это может быть application/x-www-form-urlencoded. Если отправляете файлы, часто используется multipart/form-data.

Самая частая ловушка - FormData. В этом случае браузер сам добавляет boundary к заголовку. Поэтому такой код безопаснее:

const formData = new FormData();
formData.append('avatar', file);
formData.append('name', 'Anna');

await fetch('/api/profile/avatar', {
  method: 'POST',
  body: formData,
});

Не добавляйте Content-Type: multipart/form-data вручную без необходимости. Иначе можно сломать boundary, и backend не сможет прочитать файл. В интерфейсе это обычно превращается в бесконечную загрузку или ошибку файл не выбран, хотя пользователь выбрал файл правильно.

Что важно для frontend-практики

Для интервью важен не список всех форматов, а понятное правило работы с API.

  1. Выберите HTTP-метод по смыслу операции.
  2. Положите данные в body только там, где это ожидает API.
  3. Сериализуйте body в нужный формат.
  4. Согласуйте формат с Content-Type.
  5. При чтении ответа учитывайте статус, пустое тело и одноразовое чтение потока.

Такой ответ показывает практический опыт. Вы сразу объясняете, как избежать реальных багов: сервер не видит данные, загрузка файла не работает, UI падает на пустом ответе, ошибка API теряет полезное сообщение.

Частые ошибки

Где обычно ошибаются

Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.

  1. 1

    Путать body с query parameters

    Body не является частью URL. Если вы кладете фильтры GET-запроса в body, часть инфраструктуры может проигнорировать такой запрос или обработать его нестабильно. Для получения данных обычно используйте query string. Body оставляйте для создания и изменения данных.
  2. 2

    Отправлять JSON без правильного заголовка

    Если сервер ждет JSON, но вы не указали Content-Type: application/json, backend может не распарсить тело. Надежнее явно сериализовать данные через JSON.stringify() и отправить корректный заголовок, если контракт API этого требует.
  3. 3

    Ставить Content-Type для FormData вручную

    Для FormData браузер сам добавляет multipart/form-data вместе с boundary. Если написать этот заголовок руками, boundary может пропасть, и сервер не увидит поля или файлы. В таком случае оставьте заголовок браузеру.
  4. 4

    Читать response body несколько раз

    Методы response.json(), response.text() и response.blob() читают один и тот же поток. После первого чтения тело считается использованным. Выберите один способ парсинга или используйте response.clone(), если вам действительно нужна копия.
  5. 5

    Парсить пустой ответ как JSON

    Успешный ответ не обязан содержать body. Например, 204 No Content не должен парситься через json(). Проверьте статус и не ломайте UI ошибкой парсинга там, где сервер вернул корректный пустой ответ.

Follow-up

Что могут спросить дальше

Короткие ответы на вопросы, которыми проверяют, как вы работаете с body в реальных API-запросах.

Живые ответы

Видео с похожим вопросом

Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.

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

Содержание