Интервью-вопрос
Что такое body
Body - это тело HTTP-запроса или ответа, где передаются данные. Для фронтенда важно не только знать определение, но и правильно отправлять payload, читать ответ и не ломать UI на пустом или повторно прочитанном теле.
- Добавлен
- Редакция
Подготовьте короткий ответ и пару деталей на случай уточняющих вопросов.
Мини-квиз
Проверка перед разбором
Несколько быстрых вопросов перед разбором. Так проще поймать места, которые только кажутся понятными.
Вопрос 1 из 50 правильно
Разбор
Разобраться, а не зазубрить
Дальше разбираем суть, типичные уточнения и места, где легко сказать лишнее или перепутать термины.
Базовая идея
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
Обычно используйте query string в GET. Так запрос понятнее, лучше кэшируется и стабильнее проходит через инфраструктуру.Используйте POST, PUT или PATCH. Payload кладите в body в формате, который ожидает API.Используйте FormData и не задавайте multipart Content-Type вручную.Сначала проверьте статус и тип ответа. Потом выбирайте 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Проверить response.ok и статус
- 2Посмотреть Content-Type или контракт API
- 3Выбрать один способ чтения body
- 4Обработать пустой ответ без падения UI
- 1Сразу вызвать response.json()
- 2Не проверить 204 или пустое тело
- 3Попробовать прочитать body второй раз
- 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.
- Выберите HTTP-метод по смыслу операции.
- Положите данные в body только там, где это ожидает API.
- Сериализуйте body в нужный формат.
- Согласуйте формат с
Content-Type. - При чтении ответа учитывайте статус, пустое тело и одноразовое чтение потока.
Такой ответ показывает практический опыт. Вы сразу объясняете, как избежать реальных багов: сервер не видит данные, загрузка файла не работает, UI падает на пустом ответе, ошибка API теряет полезное сообщение.
Частые ошибки
Где обычно ошибаются
Проверьте формулировки, которые звучат уверенно, но на интервью быстро выдают пробелы.
- 1
Путать body с query parameters
Body не является частью URL. Если вы кладете фильтры GET-запроса в body, часть инфраструктуры может проигнорировать такой запрос или обработать его нестабильно. Для получения данных обычно используйте query string. Body оставляйте для создания и изменения данных. - 2
Отправлять JSON без правильного заголовка
Если сервер ждет JSON, но вы не указалиContent-Type: application/json, backend может не распарсить тело. Надежнее явно сериализовать данные черезJSON.stringify()и отправить корректный заголовок, если контракт API этого требует. - 3
Ставить Content-Type для FormData вручную
ДляFormDataбраузер сам добавляетmultipart/form-dataвместе с boundary. Если написать этот заголовок руками, boundary может пропасть, и сервер не увидит поля или файлы. В таком случае оставьте заголовок браузеру. - 4
Читать response body несколько раз
Методыresponse.json(),response.text()иresponse.blob()читают один и тот же поток. После первого чтения тело считается использованным. Выберите один способ парсинга или используйтеresponse.clone(), если вам действительно нужна копия. - 5
Парсить пустой ответ как JSON
Успешный ответ не обязан содержать body. Например,204 No Contentне должен парситься черезjson(). Проверьте статус и не ломайте UI ошибкой парсинга там, где сервер вернул корректный пустой ответ.
Follow-up
Что могут спросить дальше
Короткие ответы на вопросы, которыми проверяют, как вы работаете с body в реальных API-запросах.
Живые ответы
Видео с похожим вопросом
Если найдем публичные интервью с таким вопросом, добавим их сюда. Их удобно смотреть после теории, чтобы свериться с живыми ответами.
Пока видео нет. Когда появятся подходящие публичные интервью, добавим их в этот блок, чтобы можно было сравнить разбор с тем, как отвечают реальные кандидаты.
Что такое Accessibility 😎
Accessibility означает, что интерфейсом могут пользоваться люди с разными возможностями, устройствами и ограничениями. Разбираем, как ответить на интервью про семантику, клавиатуру, ARIA, WCAG и практические проверки во фронтенде.
Где используется тег div 😎
Тег div используют как нейтральный контейнер для группировки, стилизации и раскладки, когда нет более точного HTML-элемента. Здесь разберете, как ответить без ухода в div soup и ошибок доступности.