maralov
@maralov
фронт-джун

Как отправить body с помощью get запроса?

Доброе время суток. Делаю СПА на реакт, нужно обработать форму и оправить. Бекендщик написал чтобы использовать GET запрос, но проблема в том что я должен данные из формы отправить в body, а не в урле, и вторая проблема, что он утверждает якобы что это нормальное стандартное действие, отправлять с ГЕТом тело.
Строка Запроса формируется так api/«данные из поля 1»/«данные из поля 2»
И есть третье поле Которе должно уйти в body. Но я хоть убейте не понимаю как это вообще возможно ... в моем понимании для это надо пост запрос. »

Он ссылается на https://tools.ietf.org/html/rfc7231#page-24
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

Со словами мол ты прост оне опытный, а так то
передача body в get запросе это нормальное действие в http протоколе

И показывает мне на примере работы программы Posman что все нормально работает и json передаётся...

Помогите популярно растолковать, что это не корректно хоть и глобально «не запрещено«
  • Вопрос задан
  • 35020 просмотров
Пригласить эксперта
Ответы на вопрос 2
YuriyVorobyov1333
@YuriyVorobyov1333
Software Developer
Так делать можно, но не нужно, можете привести это:
A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request.

Т.е. gолезная нагрузка в сообщении запроса GET не имеет определенной семантики; отправка тела полезной нагрузки в запросе GET может привести к тому, что некоторые существующие реализации отклонят запрос. Если обратиться к более старым спецификациям, то там вообще написано, что надо игнорировать тело при GET. Да и вообще посмотрите на API крупных сервисов, хоть где-то при работе с ними вы в гете отправляете body?), а еще можете привести в пример Swagger и поведение GET там (Swagger ни за что в жизни не отправит body в GET). Но на любой пример есть и антипример, например, Elasticsearch принимает body в GET. Также если полезть в спецификацию, то согласно RFC 2119 разработчики могут слать body, если на то есть веские причины, наверное, к этим причинам можно отнести большое число параметров или если это body не изменит какие-то данные.

P.s. показывать на Postman не круто, т.к. Postman , как минимум, сам добавляет заголовки и может отправлять form-data с выбранным пользователем заголовком application/json
Ответ написан
Lynn
@Lynn
nginx, js, css
Несмотря на то, что стандарт HTTP не запрещает тело в GET-запросе, браузеры придерживаются другого мнения:

https://stackoverflow.com/a/45550919/1016033

https://fetch.spec.whatwg.org/#ref-for-dom-request...
If either init["body"] exists and is non-null or inputBody is non-null, and request’s method is `GET` or `HEAD`, then throw a TypeError.


https://xhr.spec.whatwg.org/#the-send()-method
If this’s request method is `GET` or `HEAD`, then set body to null.


В переводе на русский — из браузера нельзя сделать GET-запрос с телом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы