Поштальон 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 текст або великі двійкові дані, форма-дані є для цього.

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

Бінарний файл може використовуватися, коли ви хочете додати до запиту нетекстові дані, наприклад, відео / аудіофайл, зображення чи будь-який інший файл бінарних даних.

Перейдіть за цим посиланням для подальшого читання: Форми в документах HTML


як щодо двійкового?
RBT

У мене є форма, яка містить 4 текстових поля та 1 поле для завантаження файлів, будь ласка, підкажіть, який варіант (дані форми або X-www-form-urlencoded) буде використаний для подання цих 5 полів у листоноші? Заздалегідь спасибі.
Kamlesh

@Kamlesh, вибачте за несвоєчасну відповідь, ключове поле форм-даних у Postman має спадне меню, де ви можете вибрати, чи це текстове поле чи файл. Ви можете встановити його на файл, а потім переглянути файл, який потрібно приєднати до корпусу. Сподіваюся, що це допомагає.
Басант Сінгх

88

Це пояснює краще: листоноші док

Орган запиту

Створюючи запити, ви б багато працювали з редактором тестових запитів. Листоноша дозволяє надіслати майже будь-який вид HTTP-запиту (Якщо ви не можете щось надіслати, повідомте нас!). Редактор тіла розділений на 4 області та має різні елементи керування залежно від типу тіла.

форми-дані

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

urlencoded

Це кодування те саме, що використовується в параметрах URL-адреси. Вам просто потрібно ввести пари ключ / значення, і Postman правильно кодує ключі та значення. Зауважте, що ви не можете завантажувати файли через цей режим кодування. Можливо, існує певна плутанина між формами та даними urlencoded, тому обов’язково спочатку зверніться до свого API.

сирий

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

двійкові

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

ОНОВЛЕННЯ

Як зазначає VKK , специфікація WHATWG кажуть, що urlencoded є типом кодування за формою за замовчуванням.

Недійсним значенням для цих атрибутів є значення application / x-www-form-urlencoded. Відсутнє значення за замовчуванням для атрибута enctype також є стан application / x-www-form-urlencoded.


5
Доктор листоноші помиляється. Специфікація WHATWG HTML5, доступна на html.spec.whatwg.org/multipage/…, чітко визначає значення за замовчуванням "application / x-www-form-urlencoded" для атрибута enctype елемента форми. Іншими словами, "application / x-www-form-urlencoded" - це кодування за замовчуванням (у HTTP термінах Content-Type), яке веб-форма використовує для передачі даних, а не багаточастинних / форм-даних. Щоб надіслати HTTP-запит після подання форми із типом вмісту даних із багаточастковою / формою, явно слід вказати це як значення ентепетичної форми.
ВКК

Отже, яка різниця між формами-даними (введеними парами ключів-значень в інтерфейсі Postman), що надсилаються із Content-Type: application/jsonзаголовком; і необроблені дані, введені як json, як {foo: bar}із тим самим Content-Type: application/jsonзаголовком?
Ініго

З даними форми-форму як ключовими парами парами content-type є багаточастинні форми data data, навіть коли ви вказуєте заголовки, а з необробленим типом content буде текст або все, що ви вказали в заголовках.
avck

20

багаточастинні / форми-дані

Примітка. Будь ласка, зверніться до RFC2388 для отримання додаткової інформації про завантаження файлів, включаючи проблеми сумісності з зворотним зв'язком, взаємозв'язок між "багаточастинними / формами-даними" та іншими типами вмісту, проблемами продуктивності тощо.

Будь ласка, зверніться до додатку для отримання інформації про проблеми безпеки для форм.

Тип вмісту "application / x-www-form-urlencoded" неефективний для надсилання великої кількості бінарних даних або тексту, що містить символи, що не містять ASCII. Тип вмісту "багаточастинні / форми-дані" слід використовувати для подання форм, що містять файли, дані, що не належать до ASCII, і двійкові дані.

Тип вмісту "multipart / form-data" відповідає правилам усіх потоків даних MIME, що містяться у багато частинах, як зазначено в RFC2045 . Визначення "багаточастинних / форм-даних" доступне в реєстрі [IANA].

Повідомлення "багаточастинні / форми-дані" містить ряд частин, кожна з яких представляє успішний елемент управління. Частини надсилаються агенту обробки в тому ж порядку, що відповідні елементи керування з'являються в потоці документів. Межі частин не повинні зустрічатися в жодних даних; як це робиться, лежить поза межами цієї специфікації.

Як і у всіх типах MIME з декількома частинами, кожна частина має необов'язковий заголовок "Тип вмісту", який за замовчуванням відповідає "текст / звичайний". Користувацькі агенти повинні надавати заголовок "Content-Type", що супроводжується параметром "charset".

додаток / 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. Тип вмісту "багаточастинні / форми-дані" слід використовувати для подання форм, що містять файли, дані, що не належать до ASCII, і двійкові дані.


15

Ось кілька додаткових прикладів, щоб побачити необроблений текст, який Поштальон передає у запиті. Це можна побачити, відкривши консоль "Листоноша":

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

форми-дані

Заголовок

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"}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.