відмінності у застосуванні / json та застосуванні / x-www-form-urlencoded


Відповіді:


187

Перший випадок - це повідомляти веб-серверу, що ви публікуєте дані JSON як у:

{ Name : 'John Smith', Age: 23}

Другий варіант - сказати веб-серверу, що ви будете кодувати параметри в URL-адресі як у:

Name=John+Smith&Age=23

17
Які наслідки це має на стороні сервера. Я бачу такі сайти як stackoverflow & Twitter x-www-form-urlencodedдля запитів AJAX, таких як голосування тощо JSON. Я думаю, що краще мати симетричну пару запитів / відповідей, тобто обох JSON.
користувач

@buffer Мені також цікаво дізнатися відповідь на ваше симетричне запитання.
Адам Джонс

1
@AdamJohns: Цей блог варто прочитати, хоча він точно не відповідає "чому": homakov.blogspot.in/2012/06/…
користувач

21
@buffer Моє розуміння використання JSON як contentType допомагає, коли дані, що надсилаються, є складнішими та передбачає багато ієрархії. тоді як форма, закодована у формі, добре відправляти прості параметри в URL-адресі, які можна читати в бек-енді без великого коду. .. Я думаю, це відповідає тому, чому його частина.
Анкіт Шрівастава

@Medorator Пізній коментар. Наприклад, коли ви надсилаєте складний об'єкт JSON з масивом об'єктів, його використання application/x-www-form-urlencodedзаплутає сервер (Elixir, використовуючи Poison в моєму випадку) і призведе до некоректного розбору об'єкта (він якось перетворив вкладений масив об'єктів на карті замість списку). Використання application/jsonмає бути правильним вибором у цьому випадку.
xji

6

webRequest.ContentType = "додаток / x-www-form-urlencoded";

  1. Звідки походить ім'я application / x-www-form-urlencoded ?

    Якщо ви надсилаєте HTTP GET- запит, ви можете використовувати параметри запиту наступним чином:

    http://example.com/path/to/page? name = тхор & color = purple

    Вміст полів кодується як рядок запиту. У application/x-www-form- urlencodedназві «S приходить з попереднього параметра запиту URL , але параметри запиту в де тілі запиту замість URL.

    Дані всієї форми надсилаються як довга рядок запиту. Рядок запиту містить пари іменних значень, розділених символом &

    наприклад field1 = value1 & field2 = value2

  2. Це може бути простий запит, який називається простим - не запускайте перевірку перед польотом

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

    • додаток / x-www-form-urlencoded
    • багаточастинні / форми-дані
    • текст / простий

3.Здебільшого плоских парам-дерев випробовується тестування application / x-www-form-urlencoded.

request.ContentType = "application / json; charset = utf-8";

  1. Дані будуть у форматі json .

Вардар і SuperAgent , два з найбільш популярних НОЙ HTTP бібліотеки, роботи з JSON органів за замовчуванням.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. Тип вмісту "application / json" - це один із попередньо просвічених запитів .

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

  1. застосування / json сприятливо для початківців. Масиви, кодовані URL, можуть бути кошмаром!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.