Ответ
Технически — да, но на практике — нет.
Согласно спецификации HTTP (RFC 7231), тело у GET-запроса не запрещено, но семантически не определено. Серверы, прокси и библиотеки могут его игнорировать. GET предназначен для получения данных, а тело обычно используется в POST или PUT для передачи.
Пример GET с телом (антипаттерн):
GET /api/resource HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 15
{"key": "value"}
Рекомендуемые альтернативы:
- Параметры запроса (query string):
/api/resource?key=value - Заголовки (headers): Для передачи метаданных.
- POST: Если нужно отправить сложные или конфиденциальные данные.
Почему это плохая практика?
- Нарушает ожидаемую семантику GET (идемпотентность и безопасность).
- Не поддерживается многими инструментами и инфраструктурой (кэширование, прокси).