Может ли HTTP-запрос иметь пустое тело?

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

Ответ

Да, HTTP-запрос может иметь пустое тело. Необходимость тела определяется методом запроса и спецификацией API.

По умолчанию:

  • GET, HEAD, DELETE, OPTIONS — обычно не имеют тела. Серверы могут его игнорировать.
  • POST, PUT, PATCH — могут иметь тело, но оно не всегда обязательно.

Пример POST-запроса с пустым телом и заголовком Content-Length: 0:

POST /api/v1/notifications/mark-all-read HTTP/1.1
Host: api.example.com
Authorization: Bearer <token>
Content-Type: application/json
Content-Length: 0

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

Критические моменты для тестирования:

  1. Спецификация API: Всегда сверяйтесь с документацией. Некоторые эндпоинты могут возвращать 400 Bad Request при пустом теле, если ожидают объект.
  2. Заголовок Content-Type: Если тело пустое, этот заголовок часто является избыточным и может быть опущен.
  3. Семантика: Пустое тело {} в JSON — это не пустое тело. Это валидный JSON-объект. Пустое тело — это полное отсутствие данных после заголовков.