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

Ответ

Да, может. Спецификация 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.

Ответ 18+ 🔞

Да ты посмотри, какой вопрос подкинули! Может ли HTTP-ответ быть без тела? Да запросто, блядь! Спецификация сама разрешает, не выдумывай.

Вот где это самое тело нахуй не нужно:

  1. Ответы, которые по факту пустые:

    • 204 No Content — всё сделал, всё удалил, всё обновил. Чего тебе ещё, пизда? Данных нет, иди нахуй. Классика после DELETE.
    • 304 Not Modified — спрашиваешь: "Чё там нового?" А тебе в ответ: "Да ни хуя нового, на, вот твоя старая копия из кеша и катись". Тело не шлют, экономия трафика, ёпта.
  2. HEAD-запрос, этот хитрожопый: Это когда ты как бы делаешь GET, но говоришь: "Э, слушай, а содержимое мне нахуй не сдалось, скинь только заголовки". Сервер тебе тело и не пришлёт, хоть ты тресни.

Вот тебе пример, как выглядит ответ, где всё по делу, но по факту — пустота:

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

А теперь, чувак, главное, чтоб не обосраться при работе с API:

  • Не жди никакого JSON'а или XML'я в ответах со статусами 1xx, 204, 304. Их там просто нет, ебать мои старые костыли!
  • Если тупо вызываешь response.json() на такой ответ — получишь ошибку парсинга, и будешь сидеть, чесать репу: "Чё за хуйня?". Всегда смотри статус и заголовок Content-Length сначала, а потом уже парсь.