Вопрос проверяет знание спецификации HTTP и понимание различий между стандартом и практикой.
Формально HTTP не запрещает body почти ни для одного метода. Однако на практике поддержка body зависит от серверов, клиентов и прокси. Для GET body считается нестандартным и часто игнорируется. Для POST, PUT и PATCH body является нормой. Поэтому важно учитывать реальное поведение инфраструктуры, а не только спецификацию.
Теоретические возможности HTTP и реальная практика часто расходятся.
Спецификация HTTP:
не запрещает body у большинства методов
не определяет семантику body для GET
Это означает, что стандарт не описывает, как сервер должен обрабатывать body в GET.
На практике:
GET с body
часто игнорируется
может отбрасываться прокси
не поддерживается многими фреймворками
POST / PUT / PATCH
body используется всегда
ожидается наличие данных
хорошо поддерживается инфраструктурой
DELETE
body технически возможен
но используется редко
поведение может быть непредсказуемым
ломает ожидания разработчиков
не поддерживается инструментами
создаёт проблемы с кэшированием
GET → query-параметры
POST / PUT / PATCH → body
DELETE → минимальные параметры
Формально body возможен почти везде, но надёжные API строятся с учётом реальной поддержки HTTP-инфраструктуры.