differenze nell'applicazione / json e nell'applicazione / x-www-form-urlencoded


Risposte:


187

Il primo caso è comunicare al server Web che si stanno pubblicando dati JSON come in:

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

La seconda opzione è dire al server web che codificherai i parametri nell'URL come in:

Name=John+Smith&Age=23

17
Quali implicazioni ha sul lato server. Vedo siti come StackOverflow e l'uso di Twitter x-www-form-urlencodedper richieste AJAX come voto ecc. La risposta inviata è JSON. Penso che sia meglio avere una coppia simmetrica richiesta / risposta, cioè entrambi JSON.
utente

@buffer Sono anche curioso di sapere la risposta alla tua domanda simmetrica.
Adam Johns,

1
@AdamJohns: Vale la pena leggere questo blog anche se non risponde esattamente al "perché": homakov.blogspot.in/2012/06/…
utente

21
@buffer La mia comprensione sta usando JSON come contentType aiuta quando i dati da inviare sono più complessi e comportano molta gerarchia .. mentre il modulo codificato è buono per inviare semplici parametri in url che possono essere letti sul backend senza troppo codice. .. Immagino che questo risponda al perché parte di esso.
Ankit Srivastava,

@Medorator Un commento in ritardo. Tuttavia, ad esempio, quando si invia un oggetto JSON complesso con una matrice di oggetti, l'utilizzo application/x-www-form-urlencodedconfonderebbe il server (elisir usando Veleno nel mio caso) e comporterebbe un'analisi inappropriata dell'oggetto (in qualche modo convertito l'array nidificato di oggetti in una mappa, anziché in un elenco). L'uso application/jsondovrebbe essere la scelta corretta in questo caso.
xji,

6

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

  1. Da dove viene il nome application / x-www-form-urlencoded ?

    Se si invia una richiesta HTTP GET , è possibile utilizzare i parametri di query come segue:

    http://example.com/path/to/page? Name = furetto & color = purple

    Il contenuto dei campi è codificato come stringa di query. Il application/x-www-form- urlencodednome deriva dal precedente parametro di query dell'URL, ma i parametri della query si trovano in cui il corpo della richiesta anziché l'URL.

    Tutti i dati del modulo vengono inviati come una stringa di query lunga. La stringa di query contiene coppie nome- valore separate da & carattere

    es. field1 = value1 & field2 = value2

  2. Può essere una semplice richiesta chiamata semplice - non attivare un controllo di verifica preliminare

    La richiesta semplice deve avere alcune proprietà. Puoi cercare qui per maggiori informazioni. Uno di questi è che sono consentiti solo tre valori per l'intestazione Content-Type per le richieste semplici

    • application / x-www-form-urlencoded
    • multipart / form-data
    • text / plain

3.Per alberi di parametri prevalentemente piatti, viene provato e testato application / x-www-form-urlencoded.

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

  1. I dati saranno in formato json .

axios e superagent , due delle più popolari librerie HTTP npm, funzionano con i corpi JSON per impostazione predefinita.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. Il tipo di contenuto "application / json" è una delle richieste preflight .

Ora, se la richiesta non è semplice , il browser invia automaticamente una richiesta HTTP prima di quella originale con il metodo OPTIONS per verificare se è possibile inviare la richiesta originale in sicurezza. Se è ok, quindi inviare la richiesta effettiva. Puoi cercare qui per maggiori informazioni.

  1. application / json è adatto ai principianti. Gli array con codifica URL possono essere un incubo!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.