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

222

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

Есть три варианта ввода данных.

Я думаю, что rawдля отправки JSON.

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

Рохан
источник
11
На сегодняшний день существует 4-й вариант размещения данных в инструменте почтальона - binary.
RBT

Ответы:

237

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

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

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

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

Обратитесь к этой ссылке для дальнейшего чтения: Формы в документах HTML

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

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

Тело запроса

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

форм-данных,

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

urlencoded

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

сырье

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

двоичный

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

ОБНОВИТЬ

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

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

avck
источник
5
Почтальон док не прав. 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.
ВКК
Так в чем же разница между данными формы (введенными парами ключ-значение в пользовательском интерфейсе почтальона), отправленными с Content-Type: application/jsonзаголовком; а необработанные данные вводятся как json как {foo: bar}с тем же Content-Type: application/jsonзаголовком?
Иниго
При использовании данных формы в качестве пар ключ-значение content-type представляет собой составные данные формы, даже если вы указываете заголовки, а с необработанным типом содержимого будет текст или все, что вы указали в заголовках.
avck
20

многочастному / форм-данных,

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

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

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

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

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

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

применение / х-WWW-форм-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 и двоичные данные.

Мохидин бин Мухаммед
источник
15

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

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

форм-данных,

заголовок

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

тело

key1=value1key2=value2

х-WWW-форм-urlencoded

заголовок

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

тело

key1=value1&key2=value2

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

заголовок

Content-Type: text/plain

тело

This is some text.

Сырой джсон

заголовок

Content-Type: application/json

тело

{"key1":"value1","key2":"value2"}
Suragch
источник