Почтальон Chrome: в чем разница между form-data, x-www-form-urlencoded и raw

Я использую расширение Postman Chrome для тестирования веб-службы.

Доступны три варианта ввода данных.

Я предполагаю, что raw предназначен для отправки JSON.

В чем разница между двумя другими, form-data и x-www-form-urlencoded?


person Rohan    schedule 03.11.2014    source источник
comment
На сегодняшний день существует 4-я возможность публиковать данные в почтальоне - binary.   -  person RBT    schedule 30.11.2017
comment
На сегодняшний день существует также 5-я возможность публиковать данные в почтальоне - GraphQL   -  person ravi kumar    schedule 07.10.2020


Ответы (4)


Это разные типы содержимого форм, определенные W3C. Если вы хотите отправить простой текст / данные ASCII, подойдет x-www-form-urlencoded. Это значение по умолчанию.

Но если вам нужно отправить текст, отличный от ASCII, или большие двоичные данные, для этого подойдут данные формы.

Вы можете использовать Raw, если хотите отправить простой текст, JSON или любую другую строку. Как следует из названия, Postman отправляет ваши необработанные строковые данные без изменений. Тип данных, которые вы отправляете, можно установить с помощью заголовка типа содержимого из раскрывающегося списка.

Двоичный можно использовать, если вы хотите прикрепить к запросу нетекстовые данные, например видео / аудиофайл, изображения или любой другой файл двоичных данных.

См. Эту ссылку для дальнейшего чтения: Формы в документах HTML < / а>

person Basant Singh    schedule 04.11.2014
comment
что насчет двоичного? - person RBT; 30.11.2017
comment
У меня есть форма с 4 текстовыми полями и 1 полем для загрузки файла. Пожалуйста, предложите мне, какой вариант (form-data или x-www-form-urlencoded) будет использоваться для отправки значения этих 5 полей в почтальоне? Заранее спасибо. - person Kamlesh; 01.02.2019
comment
@Kamlesh, извините за поздний ответ, ключевое поле form-data в Postman имеет раскрывающийся список, где вы можете выбрать, является ли это текстовым полем или файлом. Вы можете установить его как файл, а затем просмотреть файл, чтобы прикрепить его к основному тексту. Надеюсь, это поможет. - person Basant Singh; 12.02.2019

Это лучше объясняет: Документы почтальона

Тело запроса

Создавая запросы, вы часто будете иметь дело с редактором тела запроса. Postman позволяет отправлять практически любые HTTP-запросы (если вы не можете что-то отправить, сообщите нам!). Редактор тела разделен на 4 области и имеет различные элементы управления в зависимости от типа тела.

форма-данные

multipart / form-data - это кодировка по умолчанию, которую веб-форма использует для передачи данных. Это имитирует заполнение формы на веб-сайте и ее отправку. Редактор данных формы позволяет вам устанавливать пары ключ / значение (с помощью редактора ключ-значение) для ваших данных. Вы также можете прикреплять файлы к ключу. Обратите внимание, что из-за ограничений спецификации HTML5 файлы не хранятся в истории или коллекциях. Вам нужно будет снова выбрать файл во время отправки запроса.

urlencoded

Эта кодировка такая же, как и в параметрах URL. Вам просто нужно ввести пары ключ / значение, и Postman правильно закодирует ключи и значения. Обратите внимание, что вы не можете загружать файлы в этом режиме кодирования. Может быть некоторая путаница между данными формы и urlencoded, поэтому сначала проверьте свой API.

сырой

Необработанный запрос может содержать что угодно. Почтальон не трогает строку, введенную в необработанном редакторе, за исключением замены переменных среды. Все, что вы помещаете в текстовую область, отправляется вместе с запросом. Необработанный редактор позволяет вам установить тип форматирования вместе с правильным заголовком, который вы должны отправить с необработанным телом. Вы также можете установить заголовок Content-Type вручную. Обычно здесь вы отправляете данные XML или JSON.

двоичный

двоичные данные позволяют отправлять вещи, которые вы не можете ввести в Почтальоне. Например, изображения, аудио или видео файлы. Вы также можете отправлять текстовые файлы. Как упоминалось ранее в разделе данных формы, вам придется повторно прикрепить файл, если вы загружаете запрос через историю или коллекцию.

ОБНОВЛЕНИЕ

Как указано VKK, WHATWG spec говорит, что urlencoded является типом кодировки по умолчанию для форм.

Недопустимым значением по умолчанию для этих атрибутов является состояние application / x-www-form-urlencoded. Отсутствующее значение по умолчанию для атрибута enctype также является состоянием application / x-www-form-urlencoded.

person avck    schedule 06.04.2016
comment
Документ почтальона неверен. Спецификация HTML5 WHATWG доступна по адресу html.spec.whatwg .org / multipage / четко определяет значение по умолчанию application / x-www-form-urlencoded для атрибута enctype элемента формы. Другими словами, application / x-www-form-urlencoded - это кодировка по умолчанию (в терминах HTTP Content-Type), которую веб-форма использует для передачи данных, а не multipart / form-data. Чтобы отправить HTTP-запрос на отправку формы с типом содержимого multipart / form-data, необходимо явно указать это как значение enctype. - person VKK; 12.07.2017
comment
Итак, в чем разница между данными формы (введенными парами "ключ-значение" в пользовательском интерфейсе почтальона), отправленными с заголовком Content-Type: application/json; и необработанные данные, введенные как json, например {foo: bar}, с тем же заголовком Content-Type: application/json? - person Inigo; 13.08.2018
comment
С данными формы в качестве пар ключ-значение тип-контента - это составные данные-формы, даже если вы указываете заголовки, а с необработанным типом контента будет текст или все, что вы указали в заголовках. - person avck; 14.08.2018

Вот несколько дополнительных примеров, чтобы увидеть необработанный текст, который Почтальон передает в запросе. Вы можете увидеть это, открыв консоль Postman:

введите описание изображения здесь

форма-данные

Заголовок

content-type: multipart/form-data; boundary=--------------------------590299136414163472038474

Тело

key1=value1key2=value2

x-www-form-urlencoded

Заголовок

Content-Type: application/x-www-form-urlencoded

Тело

key1=value1&key2=value2

Необработанный текст / простой

Заголовок

Content-Type: text/plain

Тело

This is some text.

Необработанный json

Заголовок

Content-Type: application/json

Тело

{"key1":"value1","key2":"value2"}
person Suragch    schedule 04.05.2019

multipart / form-data

Примечание. Пожалуйста, обратитесь к RFC2388 для получения дополнительной информации о загрузке файлов, включая проблемы обратной совместимости, взаимосвязь между "multipart / form-data "и другие типы контента, проблемы с производительностью и т. д.

Информацию о проблемах безопасности форм см. В приложении.

Тип содержимого «application / x-www-form-urlencoded» неэффективен для отправки больших объемов двоичных данных или текста, содержащих символы, отличные от ASCII. Тип содержимого «multipart / form-data» следует использовать для отправки форм, содержащих файлы, данные, отличные от ASCII, и двоичные данные.

Тип содержимого "multipart / form-data" соответствует правилам всех потоков данных multipart MIME, как указано в RFC2045 . Определение «multipart / form-data» доступно в реестре [IANA].

Сообщение "multipart / form-data" содержит ряд частей, каждая из которых представляет собой успешное управление. Части отправляются агенту обработки в том же порядке, в котором соответствующие элементы управления появляются в потоке документов. Границы частей не должны встречаться ни в каких данных; как это делается, выходит за рамки данной спецификации.

Как и во всех составных типах MIME, каждая часть имеет необязательный заголовок Content-Type, который по умолчанию имеет значение «text / plain». Пользовательские агенты должны предоставлять заголовок Content-Type вместе с параметром charset.

application / x-www-form-urlencoded

Это тип содержимого по умолчанию. Формы, отправленные с этим типом контента, должны быть закодированы следующим образом:

Имена и значения элементов управления экранированы. Символы пробела заменяются +', and then reserved characters are escaped as described in [RFC1738], section 2.2: Non-alphanumeric characters are replaced by% HH ', знаком процента и двумя шестнадцатеричными цифрами, представляющими код ASCII символа. Разрывы строк представлены парами «CR LF» (т. Е. %0D%0A'). The control names/values are listed in the order they appear in the document. The name is separated from the value by = 'и пары имя / значение отделяются друг от друга символом «&».

application/x-www-form-urlencoded тело HTTP-сообщения, отправляемого на сервер, по сути, представляет собой одну гигантскую строку запроса - пары имя / значение разделяются амперсандом (&), а имена отделяются от значений символом равенства (=). Примером этого может быть:

MyVariableOne=ValueOne&MyVariableTwo=ValueTwo

Тип содержимого «application / x-www-form-urlencoded» неэффективен для отправки больших объемов двоичных данных или текста, содержащих символы, отличные от ASCII. Тип содержимого «multipart / form-data» следует использовать для отправки форм, содержащих файлы, данные, отличные от ASCII, и двоичные данные.

person Mohideen bin Mohammed    schedule 15.11.2017