Может ли HTTP-ответ (Response) не содержать тела (Body)?

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

Ответ

Да, может. Спецификация HTTP явно допускает ответы без тела.

Типичные сценарии:

  1. Ответы с информационными статусами:

    • 204 No Content — успешный запрос, но возвращать данные не нужно (например, после DELETE).
    • 304 Not Modified — ответ на условный GET, указывающий, что ресурс не изменился (тело не пересылается).
  2. Ответ на HEAD-запрос: Метод HEAD идентичен GET, но сервер никогда не возвращает тело сообщения, только заголовки.

Пример ответа 204 No Content:

HTTP/1.1 204 No Content
Date: Mon, 01 Jan 2024 12:00:00 GMT
Server: Apache
Cache-Control: no-cache

Важно для тестирования API:

  • Не ожидайте тело (body) в ответах со статусами 1xx, 204, 304.
  • При обработке таких ответов в коде (например, с response.json()) может возникнуть ошибка парсинга. Нужно проверять статус и заголовок Content-Length.