Ответ
Да, может. Спецификация HTTP явно допускает ответы без тела.
Типичные сценарии:
-
Ответы с информационными статусами:
204 No Content— успешный запрос, но возвращать данные не нужно (например, после DELETE).304 Not Modified— ответ на условный GET, указывающий, что ресурс не изменился (тело не пересылается).
-
Ответ на 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-ответ быть без тела? Да запросто, блядь! Спецификация сама разрешает, не выдумывай.
Вот где это самое тело нахуй не нужно:
-
Ответы, которые по факту пустые:
204 No Content— всё сделал, всё удалил, всё обновил. Чего тебе ещё, пизда? Данных нет, иди нахуй. Классика после DELETE.304 Not Modified— спрашиваешь: "Чё там нового?" А тебе в ответ: "Да ни хуя нового, на, вот твоя старая копия из кеша и катись". Тело не шлют, экономия трафика, ёпта.
-
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сначала, а потом уже парсь.