uygulamadaki farklılıklar / json ve uygulama / x-www-form-urlencoded


Yanıtlar:


187

İlk durum, web sunucusuna aşağıdaki gibi JSON verileri gönderdiğinizi bildirmektir:

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

İkinci seçenek, web sunucusuna URL'deki parametreleri aşağıdaki gibi kodlayacağınızı söylemektir:

Name=John+Smith&Age=23

17
Sunucu tarafında ne gibi etkileri var. x-www-form-urlencodedOylama gibi AJAX istekleri için stackoverflow ve Twitter kullanımı gibi siteleri görüyorum JSON. Ben simetrik bir istek / yanıt çifti yani JSON yani daha iyi olduğunu düşünürdüm.
kullanıcı

@buffer Simetrik sorunuzun cevabını da merak ediyorum.
Adam Johns

1
@AdamJohns: "Neden" e tam olarak cevap vermese de bu blog okumaya değer: homakov.blogspot.in/2012/06/…
kullanıcı

21
@buffer Anladığım kadarıyla JSON, contentType gönderilecek verinin daha karmaşık ve çok hiyerarşi içerdiği zaman yardımcı olurken, kodlanmış form, url'de arka planda çok kod olmadan okunabilen basit parametreler göndermek için iyidir. .. Sanırım bu neden bunun bir parçası.
Ankit Srivastava

@Medorator Geç bir yorum. Örneğin, içinde nesneler dizisi bulunan karmaşık bir JSON nesnesi gönderdiğinizde, kullanmak application/x-www-form-urlencodedsunucuyu karıştırır (benim durumumda Zehir kullanarak Elixir) ve nesnenin uygunsuz bir şekilde ayrıştırılmasına neden olur (bir şekilde iç içe diziyi dönüştürdü) liste yerine haritaya nesnelerin yerleştirilmesi). application/jsonBu durumda kullanmak doğru seçim olmalıdır.
xji

6

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

  1. Nerede gelmez application / x-www-form-urlencoded adı 'ten geliyor?

    HTTP GET isteği gönderirseniz , sorgu parametrelerini aşağıdaki gibi kullanabilirsiniz:

    http://example.com/path/to/page? Name = gelincik & color = mor

    Alanların içeriği bir sorgu dizesi olarak kodlanır. application/x-www-form- urlencodedBireyin adı geçen url sorgu parametresinden geliyor ama sorgu parametreleri nerede istek gövdesinin yerine url içindedir.

    Tüm form verileri uzun bir sorgu dizesi olarak gönderilir. Sorgu dizesi, & karakteri ile ayrılmış ad- değer çiftleri içerir

    örneğin, alan1 = değer1 ve alan2 = değer2

  2. Basit adı verilen basit bir istek olabilir - ön kontrol kontrolünü tetiklemeyin

    Basit istek bazı özelliklere sahip olmalıdır. Daha fazla bilgi için buraya bakabilirsiniz . Bunlardan biri, basit istekler için İçerik Türü üstbilgisi için yalnızca üç değere izin verilmesidir

    • Uygulama / x-www-form-urlencoded
    • Çok parçalı / form-
    • metin / düz

3. Çoğunlukla düz param ağaçları için, uygulama / x-www-form-urlencoded denenir ve test edilir.

request.ContentType = "application / json; karakter kümesi = utf-8";

  1. Veriler json formatında olacaktır .

AXIOS ve superagent , varsayılan olarak JSON organları ile daha popüler NPM HTTP kütüphaneler, işin ikisi.

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

Şimdi, istek basit bir istek değilse , tarayıcı , orijinal isteği göndermenin güvenli olup olmadığını kontrol etmek için OPTIONS yöntemiyle orijinalinden önce otomatik olarak bir HTTP isteği gönderir . Tamamsa, o zaman gerçek istek gönderin. Daha fazla bilgi için buraya bakabilirsiniz .

  1. application / json başlangıç ​​dostudur. URL kodlu diziler bir kabus olabilir!
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.