Ich habe eine alte Webanwendung, die ich unterstützen muss (die ich nicht geschrieben habe).
Wenn ich ein Formular ausfülle und abschicke und dann die Registerkarte "Netzwerk" in Chrome überprüfe, wird "Payload anfordern" angezeigt, wo normalerweise "Formulardaten" angezeigt werden. Was ist der Unterschied zwischen den beiden und wann würde einer anstelle des anderen gesendet werden?
Googelte dies, fand aber keine Informationen, die dies erklärten (nur Leute, die versuchten, Javascript-Apps dazu zu bringen, "Formulardaten" anstelle von "Nutzdaten anfordern" zu senden.
Antworten:
Die Anforderungsnutzlast - genauer gesagt: Nutzlastkörper einer HTTP-Anforderung - sind die Daten, die normalerweise von einer POST- oder PUT-Anforderung gesendet werden . Es ist der Teil nach den Headern und dem
CRLF
einer HTTP-Anfrage .Eine Anfrage mit
Content-Type: application/json
könnte folgendermaßen aussehen:Wenn Sie dies per AJAX einreichen, zeigt Ihnen der Browser einfach an, was er als Nutzlastkörper sendet. Das ist alles, was es tun kann, weil es keine Ahnung hat, woher die Daten kommen.
Wenn Sie ein HTML-Formular mit
method="POST"
undContent-Type: application/x-www-form-urlencoded
oder einreichen, könnteContent-Type: multipart/form-data
Ihre Anfrage folgendermaßen aussehen:In diesem Fall sind die Formulardaten die Anforderungsnutzlast. Hier weiß der Browser mehr: Er weiß, dass der Balken der Wert des Eingabefelds foo des übermittelten Formulars ist. Und das zeigt es dir.
Sie unterscheiden sich
Content-Type
also in der Art und Weise, wie Daten übermittelt werden. In beiden Fällen befinden sich die Daten im Nachrichtentext. Und Chrome unterscheidet, wie die Daten in den Entwicklertools angezeigt werden.quelle
json
oder setzenx-www-form-urlencoded
. Ersteres sendet die Daten als Anforderungsnutzdaten, während letzteres sie als URL-Abfrage codiert. Beide scheinen gut zu funktionieren. Gibt es einen Grund, einen von ihnen zu bevorzugen? Ich sehe die meisten Websites wie Twitter, Google, Facebook, Stackoverflow als Inhaltstyp festlegenx-www-form-urlencoded
. Gibt es einen bestimmten Grund?In Chrome wird eine Anfrage mit 'Content-Type: application / json' als Request PayedLoad angezeigt und sendet Daten als json-Objekt.
Die Anforderung mit 'Content-Type: application / x-www-form-urlencoded' zeigt jedoch Formulardaten an und sendet Daten als Schlüssel: Wert-Paar . Wenn Sie also ein Objektarray in einem Schlüssel haben , wird der Wert dieses Schlüssels abgeflacht:
sendet
quelle