perbedaan dalam aplikasi / json dan aplikasi / x-www-form-urlencoded

159

Apa perbedaan antara

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

dan

webRequest.ContentType = "application / x-www-form-urlencoded";

Prithvi Raj Nandiwal
sumber

Jawaban:

187

Kasus pertama memberi tahu server web bahwa Anda memposting data JSON seperti pada:

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

Opsi kedua memberi tahu server web bahwa Anda akan menyandikan parameter dalam URL seperti pada:

Name=John+Smith&Age=23
Icarus
sumber
17
Apa implikasi yang dimilikinya di sisi server. Saya melihat situs-situs seperti stackoverflow & penggunaan Twitter x-www-form-urlencodeduntuk permintaan AJAX seperti suara dll. Respons yang dikirim kembali adalah JSON. Saya akan berpikir bahwa lebih baik untuk memiliki pasangan permintaan / respons simetris yaitu keduanya JSON.
pengguna
@ buffer Saya juga ingin tahu jawaban atas pertanyaan simetris Anda.
Adam Johns
1
@AdamJohns: Blog ini layak dibaca meskipun tidak persis menjawab "mengapa": homakov.blogspot.in/2012/06/…
pengguna
21
@buffer Pemahaman saya menggunakan JSON karena contentType membantu ketika data yang dikirim lebih kompleks dan melibatkan banyak hierarki .. sedangkan formulir yang dikodekan baik untuk mengirim params sederhana di url yang dapat dibaca di backend tanpa banyak kode. .. Saya kira ini menjawab mengapa bagian dari itu.
Ankit Srivastava
@Medorator Komentar terlambat. Meskipun misalnya, ketika Anda mengirim objek JSON kompleks dengan array objek di dalamnya, menggunakan application/x-www-form-urlencodedakan membingungkan server (Elixir menggunakan Poison dalam kasus saya) dan menghasilkan beberapa penguraian objek yang tidak tepat (entah bagaimana mengubah array bersarang objek ke peta, bukan daftar). Penggunaan application/jsonharus menjadi pilihan yang benar dalam kasus ini.
xji
6

webRequest.ContentType = "application / x-www-form-urlencoded";

  1. Dari mana nama aplikasi / x-www-form-urlencoded berasal?

    Jika Anda mengirim permintaan GET HTTP , Anda dapat menggunakan parameter kueri sebagai berikut:

    http://example.com/path/to/page? nama = musang & warna = ungu

    Konten bidang dikodekan sebagai string kueri. The application/x-www-form- urlencodedNama 's berasal dari sebelumnya parameter url permintaan tetapi parameter query di mana tubuh permintaan bukannya url.

    Seluruh data formulir dikirim sebagai string kueri panjang. String kueri berisi pasangan nama-nilai yang dipisahkan oleh & karakter

    misal field1 = value1 & field2 = value2

  2. Ini bisa berupa permintaan sederhana yang disebut sederhana - jangan memicu pemeriksaan prapengaturan

    Permintaan sederhana harus memiliki beberapa properti. Anda dapat melihat di sini untuk info lebih lanjut. Salah satunya adalah bahwa hanya ada tiga nilai yang diizinkan untuk header Jenis Konten untuk permintaan sederhana

    • application / x-www-form-urlencoded
    • multipart / formulir-data
    • teks / polos

3.Untuk sebagian besar pohon param datar, aplikasi / x-www-form-urlencoded dicoba dan diuji.

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

  1. Data akan menjadi format json .

aksioma dan superagen , dua pustaka HTTP npm yang lebih populer, bekerja dengan badan JSON secara default.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. "application / json" Type-Type adalah salah satu permintaan Preflighted .

Sekarang, jika permintaan itu bukan permintaan sederhana , browser secara otomatis mengirim permintaan HTTP sebelum yang asli dengan metode OPTIONS untuk memeriksa apakah aman untuk mengirim permintaan asli. Jika tidak apa-apa, maka kirimkan permintaan aktual. Anda dapat melihat di sini untuk info lebih lanjut.

  1. application / json ramah bagi pemula. Array yang dikodekan URL bisa menjadi mimpi buruk!
fgul
sumber