Unterschiede in application / json und application / x-www-form-urlencoded

159

Was ist der Unterschied zwischen

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

und

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

Prithvi Raj Nandiwal
quelle

Antworten:

187

Der erste Fall besteht darin, dem Webserver mitzuteilen, dass Sie JSON-Daten wie folgt veröffentlichen:

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

Die zweite Option teilt dem Webserver mit, dass Sie die Parameter in der URL wie folgt codieren:

Name=John+Smith&Age=23
Ikarus
quelle
17
Welche Auswirkungen hat dies auf der Serverseite? Ich sehe Websites wie Stackoverflow und Twitter, die x-www-form-urlencodedfür AJAX-Anfragen wie Abstimmungen usw. verwendet werden. Die zurückgesendete Antwort lautet JSON. Ich würde denken, dass es besser ist, ein symmetrisches Anforderungs- / Antwortpaar zu haben, dh beide JSON.
Benutzer
@buffer Ich bin auch neugierig auf die Antwort auf Ihre symmetrische Frage.
Adam Johns
1
@AdamJohns: Dieser Blog ist lesenswert, obwohl er nicht genau das "Warum" beantwortet: homakov.blogspot.in/2012/06/…
Benutzer
21
@buffer Mein Verständnis ist, dass die Verwendung von JSON als contentType hilfreich ist, wenn die zu sendenden Daten komplexer sind und viele Hierarchien beinhalten. Während die formcodierte Form gut ist, um einfache Parameter in URL zu senden, die im Backend ohne zu viel Code gelesen werden können. Ich denke, dies beantwortet den Warum-Teil davon.
Ankit Srivastava
@Medorator Ein später Kommentar. Wenn Sie beispielsweise ein komplexes JSON-Objekt mit einem Array von Objekten senden, application/x-www-form-urlencodedwürde die Verwendung den Server verwirren (in meinem Fall Elixier mit Poison) und zu einer unangemessenen Analyse des Objekts führen (das verschachtelte Array wurde irgendwie konvertiert) von Objekten zu einer Karte anstelle einer Liste). Unter Verwendung application/jsonsollte die richtige Wahl in diesem Fall sein.
Xji
6

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

  1. Woher kommt die Anwendung / x-www-form-urlencoded Name ?

    Wenn Sie eine HTTP- GET- Anforderung senden , können Sie die Abfrageparameter wie folgt verwenden:

    http://example.com/path/to/pageName = Frettchen & Farbe = lila

    Der Inhalt der Felder wird als Abfragezeichenfolge codiert. Dasapplication/x-www-form- urlencoded Name des 'stammt vom vorherigen URL-Abfrageparameter, aber die Abfrageparameter befinden sich dort, wo sich der Anfragetext anstelle der URL befindet.

    Die gesamten Formulardaten werden als lange Abfragezeichenfolge gesendet. Die Abfragezeichenfolge enthält Name-Wert- Paare, die durch & Zeichen getrennt sind

    zB Feld1 = Wert1 & Feld2 = Wert2

  2. Es kann eine einfache Anfrage sein, die einfach genannt wird - Lösen Sie keine Preflight-Prüfung aus

    Einfache Anfrage muss einige Eigenschaften haben. Weitere Informationen finden Sie hier . Eine davon ist, dass für den Content-Type-Header für einfache Anforderungen nur drei Werte zulässig sind

    • application / x-www-form-urlencoded
    • mehrteilige / Formulardaten
    • Text / Klartext

3.Für meist flache Parameterbäume hat sich application / x-www-form-urlencoded bewährt.

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

  1. Die Daten werden im JSON- Format vorliegen.

axios und Superagent , zwei der beliebtesten npm HTTP - Bibliotheken, die Arbeit mit JSON Körper standardmäßig.

{
  "id": 1,
  "name": "Foo",
  "price": 123,
  "tags": [
    "Bar",
    "Eek"
  ],
  "stock": {
    "warehouse": 300,
    "retail": 20
  }
}
  1. Der Inhaltstyp "application / json" ist eine der Preflighted-Anforderungen .

Wenn die Anforderung keine einfache Anforderung ist , sendet der Browser automatisch eine HTTP-Anforderung vor der ursprünglichen Anforderung mit der OPTIONS- Methode, um zu überprüfen, ob das Senden der ursprünglichen Anforderung sicher ist. Wenn es in Ordnung ist, senden Sie die tatsächliche Anfrage. Weitere Informationen finden Sie hier .

  1. application / json ist anfängerfreundlich. URL-codierte Arrays können ein Albtraum sein!
fgul
quelle