Всегда ли HTTP-запрос содержит тело (body)?

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

Ответ

Нет, тело HTTP-запроса присутствует не всегда. Его наличие определяется методом запроса и семантикой операции.

Методы без тела (обычно):

  • GET — запрашивает данные, тело не используется.
  • HEAD — аналогичен GET, но возвращает только заголовки.
  • DELETE — может не иметь тела, если ресурс идентифицируется URL.
  • OPTIONS — запрашивает поддерживаемые методы.

Методы с телом (часто):

  • POST — отправляет данные для создания ресурса.
  • PUT — отправляет данные для полного обновления ресурса.
  • PATCH — отправляет данные для частичного обновления.

Примеры:

Запрос GET без тела:

GET /api/users HTTP/1.1
Host: example.com
Accept: application/json

Запрос POST с телом в формате JSON:

POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 27

{"name": "John", "age": 30}

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