Что такое тело (body) HTTP-запроса и ответа?

«Что такое тело (body) HTTP-запроса и ответа?» — вопрос из категории HTTP и веб-протоколы, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тело (body) HTTP-сообщения — это необязательная часть, которая следует за заголовками и содержит фактические передаваемые данные. От заголовков тело отделяется пустой строкой.

Тело HTTP-запроса (Request Body): Используется методами, которые отправляют данные на сервер: POST, PUT, PATCH.

  • Назначение: Передача данных для создания/обновления ресурса (JSON, XML, файлы, форма).
  • Пример JSON-тела для создания пользователя:

    POST /api/users HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {
      "name": "Alice",
      "email": "alice@example.com",
      "active": true
    }
  • Метод GET, как правило, не имеет тела; данные передаются в URL как query-параметры (?id=123).

Тело HTTP-ответа (Response Body): Содержит данные, запрошенные клиентом, или результат операции.

  • Назначение: Возврат HTML-страницы, JSON/XML API, файлов, изображений.
  • Пример успешного JSON-ответа:

    HTTP/1.1 201 Created
    Content-Type: application/json
    
    {
      "id": 456,
      "name": "Alice",
      "created_at": "2023-10-01T12:00:00Z"
    }
  • Ответы с кодами ошибок (4xx, 5xx) также могут содержать тело с описанием проблемы.

Ключевые заголовки, связанные с телом:

  • Content-Type — определяет формат данных (MIME-тип), например, application/json, application/x-www-form-urlencoded, multipart/form-data.
  • Content-Length — размер тела в байтах.
  • Transfer-Encoding — может указывать на chunked-передачу, если размер заранее неизвестен.