Ответ
Технически — да, но это противоречит семантике HTTP и не рекомендуется.
- Спецификация RFC 7231 явно не запрещает тело в GET, но указывает, что серверы могут его игнорировать. Многие прокси, балансировщики нагрузки и библиотеки (например, некоторые версии
curl,requestsв Python) могут обрезать или некорректно обрабатывать такое тело. - GET предназначен для получения (запроса) данных, а не для их отправки. Для отправки данных используются методы POST, PUT или PATCH.
- Проблемы при тестировании:
- Непредсказуемое поведение на разных серверах и инфраструктуре.
- Сложность отладки и анализа трафика через стандартные прокси (Charles, Fiddler), которые могут не отображать тело GET.
- Нарушение контракта API, что усложняет автоматизацию.
Правильная практика для GET: передавать параметры через query-строку в URL.
GET /api/users?active=true&role=admin HTTP/1.1
Host: example.com
Если нужно отправить сложные данные (например, фильтр), используйте POST даже для операций, не создающих ресурс, либо кодируйте данные в query-параметрах (с учетом ограничения длины URL).