Ответ
Технически — может, но семантически — не должен.
- Спецификация HTTP не запрещает наличие тела у GET-запроса, но указывает, что сервер может его игнорировать.
- Семантика метода: GET предназначен для получения (retrieval) данных, а не для их передачи. Данные для фильтрации или идентификации ресурса должны передаваться в URL (через query-параметры) или в заголовках.
- Практика и совместимость: Многие промежуточные прокси, кэши и библиотеки не ожидают тело у GET и могут его отбросить, что приведет к ошибкам.
Неправильно (нестандартно):
GET /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
{"active": true}
Правильно:
- Использовать query-параметры:
GET /api/users?active=true - Для передачи сложных данных использовать метод POST (или другой подходящий метод, например, PUT, PATCH).