Ответ
Да, технически возможно, но это противоречит стандарту HTTP.
- Стандарт (RFC 7231): Спецификация не запрещает тело в GET-запросе, но указывает, что сервер должен его игнорировать. На практике многие серверы, прокси или брандмауэры могут отвергнуть такой запрос.
- Практика: Использование тела в GET считается антипаттерном. Для передачи данных следует использовать:
- Query-параметры в URL (например,
?search=value&page=2). - Методы POST или PUT, если данные сложные или объемные.
- Query-параметры в URL (например,
- Исключения: Некоторые API (например, Elasticsearch) допускают GET с телом для удобства составления сложных поисковых запросов в JSON.
Пример отправки (curl, не рекомендуется):
curl -X GET -H "Content-Type: application/json" -d '{"query":{"match_all":{}}}' http://example.com/search
Рекомендуемая альтернатива (использование POST для поиска):
curl -X POST -H "Content-Type: application/json" -d '{"query":{"match_all":{}}}' http://example.com/search Ответ 18+ 🔞
Давай разберем эту дичь, а то у меня уже терпения ноль, ебать.
Смотри, по факту, технически-то можно. Ну вот взял и запихнул тело в GET-запрос, как какой-нибудь мартышлюшка пытается впихнуть невпихуемое. Код отправит, библиотека не сломается. Но это, блядь, всё равно что прийти в баню с удочкой — вроде и зайти пустили, но все на тебя как на долбоёба смотрят.
Почему? А потому что есть такой свод неписаных, но охуенно важных правил — HTTP-стандарт. И там чётко сказано: если серверу прилетел GET с телом, он должен сделать вид, что этого тела не существует. Должен его проигнорировать, как игнорирует теща твои умные мысли за праздничным столом. А на практике? На практике любой мало-мальски адекватный брандмауэр, прокси или сам сервер может посмотреть на эту хуйню, сказать «чё за пиздопроебина?» и просто отклонить запрос. И будешь ты сидеть и чесать репу.
Так что делать-то, спрашиваешь? Да всё просто, как три копейки!
-
Query-параметры, ёпта! Всё, что хочешь передать, лепи в сам URL, после знака вопроса.
http://example.com/search?q=пиздатый+ответ&page=5&sort=descУдобно, прозрачно, все довольны. -
POST или PUT. Если данных овердохуища, или они сложные (как тот твой JSON), то бери POST. Он для этого и создан — таскать тяжелые посылки. Это как использовать грузовик вместо сумки-тележки.
Ну а исключения, конечно, есть, куда ж без них. Вот Elasticsearch, хитрая жопа, позволяет GET с телом, чтобы им было удобно свои поисковые запросы-монстры слать. Но это они такие особенные, извращенцы. Не надо на них равняться.
Смотри, вот наглядная разница:
Как делать НЕ НАДО (работать-то может, но ты выглядишь как полупидор):
curl -X GET -H "Content-Type: application/json" -d '{"query":{"match_all":{}}}' http://example.com/search
Как делать ПРАВИЛЬНО и НОРМАЛЬНО (все спокойны, доверия ебать к тебе растёт):
curl -X POST -H "Content-Type: application/json" -d '{"query":{"match_all":{}}}' http://example.com/search
Короче, запомни: GET с телом — это как ебаться в пальто. В принципе возможно, но всем неудобно, выглядит идиотски, и лучше так не делать. Выбирай правильный инструмент, и будет тебе счастье.