Was ist der Unterschied zwischen "Payload anfordern" und "Formulardaten", wie auf der Registerkarte "Netzwerk" der Chrome Dev Tools angezeigt?

244

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.

red888
quelle
Mögliches Duplikat von stackoverflow.com/questions/10494574
lefloh
2
Verstehe immer noch nicht, was der Unterschied zwischen den beiden ist. Ist "Request Payload" nur eine Anfrage, die nicht mit einem Typ codiert wurde?
Red888

Antworten:

274

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 CRLFeiner HTTP-Anfrage .

Eine Anfrage mit Content-Type: application/jsonkönnte folgendermaßen aussehen:

POST /some-path HTTP/1.1
Content-Type: application/json

{ "foo" : "bar", "name" : "John" }

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"und Content-Type: application/x-www-form-urlencodedoder einreichen, könnte Content-Type: multipart/form-dataIhre Anfrage folgendermaßen aussehen:

POST /some-path HTTP/1.1
Content-Type: application/x-www-form-urlencoded

foo=bar&name=John

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-Typealso 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.

Lefloh
quelle
3
Gibt es einen Grund, in Bezug auf Größe usw. einander vorzuziehen? Speziell für leichte AJAX-Anrufe?
Benutzer
@puffer sorry, ich verstehe deine Frage nicht.
Lefloh
3
Wenn ich einen AJAX-Anruf sende, kann ich den Inhaltstyp entweder auf jsonoder setzen x-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 festlegen x-www-form-urlencoded. Gibt es einen bestimmten Grund?
Benutzer
2
Dies hängt nicht wirklich mit dem OP zusammen, aber vielleicht hilft diese Antwort .
Lefloh
13

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:

{ Id: 1, 
name:'john', 
phones:[{title:'home',number:111111,...},
        {title:'office',number:22222,...}]
}

sendet

{ Id: 1, 
name:'john', 
phones:[object object]
phones:[object object]
}
Mohammadreza
quelle
PHP ist natürlich böse. Die Popularität von application / x-www-form-urlencoded wird durch die Popularität von PHP definiert.
Brian Haak
4
herabgestimmt, weil es kein "json-Objekt" gibt. Die gesendeten JSON-Daten werden als einfache Zeichenfolge gesendet, da JSON im Wesentlichen eine Zeichenfolge ist. Sie können es natürlich mit json_encode in ein Standard- "Objekt" konvertieren, aber das macht es auch nicht zu einem "json-Objekt".
Volkan Ulukut
Ok, ich denke, Javascript Json Template Objekt oder nur Javascript Objekt ist besser
Mohammadreza
1
Nur "json" oder wenn Sie den Typ "json string" hervorheben möchten, wäre in Ordnung.
Volkan Ulukut