Senden HTTP-POST-Methoden Daten als QueryString?

Lesezeit: 5 Minuten

Senden HTTP POST Methoden Daten als QueryString
kwichz

Ich würde gerne wissen, ob die POST-Methode auf HTTP Daten als QueryString sendet oder ob sie eine spezielle Struktur verwendet, um die Daten an den Server zu übergeben.

Tatsächlich sehe ich, wenn ich die Kommunikation mit der POST-Methode vom Client zum Server (z. B. mit Fiddler) analysiere, keinen QueryString, sondern einen Form-Body-Kontext mit den Name/Wert-Paaren.

  • Soweit ich weiß, ist es bei GET eigentlich dasselbe, der einzige Unterschied besteht darin, dass die Abfragezeichenfolge nicht an die URL angehängt wird

    – sperren

    3. Mai 11 um 23:19 Uhr

  • Ich hatte immer gedacht, dass nur GET die Abfragezeichenfolge ausführt, aber en.wikipedia.org/wiki/POST_%28HTTP%29 sagt dasselbe wie Schloss. Interessant.

    – mehr schief

    3. Mai 11 um 23:20 Uhr

Senden HTTP POST Methoden Daten als QueryString
Greg Bray

Der beste Weg, dies zu visualisieren, ist die Verwendung eines Paketanalysators wie z Wireshark und Folgen Sie dem TCP-Stream. HTTP verwendet einfach TCP, um einen Datenstrom zu senden, der mit ein paar Zeilen HTTP-Headern beginnt. Oft sind diese Daten einfach zu lesen, da sie aus HTML, CSS oder XML bestehen, aber es kann jede Art von Daten sein, die über das Internet übertragen werden (ausführbare Dateien, Bilder, Videos usw.).

Bei einer GET-Anfrage fordert Ihr Computer eine bestimmte URL an und der Webserver antwortet normalerweise mit einem 200-Statuscode und der Inhalt der Webseite wird direkt nach den HTTP-Antwortheadern gesendet. Dieser Inhalt ist derselbe Inhalt, den Sie sehen würden, wenn Sie die Quelle der Webseite in Ihrem Browser anzeigen würden. Die von Ihnen erwähnte Abfragezeichenfolge ist nur ein Teil der URL und wird in den HTTP-GET-Anforderungsheader aufgenommen, den Ihr Computer an den Webserver sendet. Nachfolgend finden Sie ein Beispiel für eine HTTP GET-Anforderung an http://accel91.citrix.com:8000/OA_HTML/OALogout.jsp?menu=Y, gefolgt von einer 302-Umleitungsantwort vom Server. Einige der HTTP-Header sind aufgrund der Größe des Anzeigefensters umgebrochen (diese nehmen eigentlich nur jeweils eine Zeile ein), und die 302-Umleitung enthält eine einfache HTML-Webseite mit einem Link zur umgeleiteten Webseite (die meisten Browser leiten automatisch jede 302-Antwort um an die URL, die im Location-Header aufgeführt ist, anstatt die HTML-Antwort anzuzeigen):

HTTP GET mit 302-Umleitung

Für eine POST-Anforderung haben Sie möglicherweise immer noch eine Abfragezeichenfolge, aber dies ist ungewöhnlich und hat nichts mit den Daten zu tun, die Sie per POST senden. Stattdessen werden die Daten direkt nach den HTTP-Headern eingefügt, die Ihr Browser an den Server sendet, ähnlich der 200-Antwort, die der Webserver verwendet, um auf eine GET-Anforderung zu antworten. Bei POSTing handelt es sich bei diesen Daten um ein einfaches Webformular kodiert mit der gleichen URL-Kodierung die eine Abfragezeichenfolge verwendet, aber wenn Sie einen SOAP-Webdienst verwenden, könnte er auch mit a codiert werden mehrteiliges MIME-Format und XML-Daten.

Hier ist zum Beispiel, was ein HTTP-POST zu einem XML-basierten SOAP-Webdienst ist http://192.168.24.23:8090/msh sieht aus wie drin Wireshark TCP-Stream folgen:

HTTP-POST-TCP-Stream

  • Tolle Antwort – möchte nur abklären rfc3986 3.4 “Die Abfragekomponente enthält nicht hierarchische Daten, die zusammen mit Daten in der Pfadkomponente (Abschnitt 3.3) dazu dienen, eine Ressource zu identifizieren”. Das heißt, im Kontext eines POST stellt die Abfrage nicht hierarchische Daten dar, die auf die Ressource verweisen, an die Sie posten. Das beste Beispiel, das mir einfällt, ist eine Datenbanktabelle mit zusammengesetzten PKs. ZB eine Personentabelle mit PKS von Name und Alter „/person?name=matt&age=80“ anstelle einer einzelnen PK, wobei die URL „/person/146“ sein könnte

    – aaaaa

    3. Juni 16 um 7:30 Uhr

Senden HTTP POST Methoden Daten als QueryString
GordonM

Post verwendet den Nachrichtentext, um die Informationen an den Server zurückzusenden, im Gegensatz zu Get, das die Abfragezeichenfolge verwendet (alles nach dem Fragezeichen). Es ist möglich, sowohl eine Get-Abfragezeichenfolge als auch einen Post-Nachrichtentext in derselben Anfrage zu senden, aber das kann etwas verwirrend werden und sollte daher am besten vermieden werden.

Im Allgemeinen schreibt die Best Practice vor, dass Sie Get verwenden, wenn Sie Daten abrufen möchten, und Post, wenn Sie sie ändern möchten. (Diese Regeln sind nicht in Stein gemeißelt, die Spezifikationen verbieten es nicht, Daten mit Get zu ändern, aber es wird im Allgemeinen vermieden, weil Sie nicht möchten, dass Leute Änderungen vornehmen, indem sie einfach auf einen Link klicken oder eine URL eingeben.)

Umgekehrt können Sie Post verwenden, um Daten abzurufen, ohne sie zu ändern, aber mit Get können Sie die Seite mit einem Lesezeichen versehen oder die URL mit anderen Personen teilen, Dinge, die Sie mit Post nicht tun könnten.

Das tatsächliche Format der im Nachrichtentext gesendeten Daten liegt ganz beim Absender und wird mit angegeben Content-Type Header. Wenn nicht angegeben, ist der Standardinhaltstyp für HTML-Formulare application/x-www-form-urlencoded, was bedeutet, dass der Server erwartet, dass der Beitragstext eine Zeichenfolge ist, die ähnlich wie eine GET-Abfragezeichenfolge codiert ist. Darauf kann man sich aber nicht in allen Fällen verlassen. RFC2616 sagt Folgendes zum Content-Type-Header:

Jede HTTP/1.1-Nachricht, die einen Entity-Body enthält, SOLLTE Folgendes enthalten:
Content-Type-Header-Feld, das den Medientyp dieses Körpers definiert. Wenn
und nur wenn der Medientyp nicht durch ein Content-Type-Feld angegeben ist, wird die
Der Empfänger KANN versuchen, den Medientyp durch Inspektion seines zu erraten
Inhalt und/oder die Namenserweiterung(en) der URI, die zur Identifizierung der verwendet wird
Ressource. Wenn der Medientyp unbekannt bleibt, SOLLTE der Empfänger
Behandle es als Typ “application/octet-stream”.

  • Aber was senden? Eine Abfragezeichenfolge? Wie bereits gesagt, auf jQuery, wenn ich versuche, diese String-Daten zu senden: param1=1&param2′, mit POST und AJAX, konvertiert es automatisch diesen QueryString und fügt diese Variablen in den Text der Anfrage ein 🙂

    – kwichz

    4. Mai 11 um 16:25 Uhr

  • Was gesendet wird, liegt ganz bei Ihnen. Standardmäßig ist es eine Zeichenfolge, die wie eine Abfragezeichenfolge codiert ist, aber es könnte JSON, XML, Klartext oder sogar Binärdaten sein. Der Content-Type-Header teilt dem Server mit, welche Art von Daten im POST-Body zu erwarten sind.

    – GordonM

    23. Februar 16 um 18:55 Uhr

  • „Wenn nicht angegeben, ist der Standardinhaltstyp application/x-www-form-urlencoded“ – Das gilt für HTML-Formulare, nicht im Allgemeinen.

    – QUentin

    9. Februar 18 um 12:09 Uhr

  • @Quentin Du hast Recht, ich habe den RFC überprüft und die Antwort aktualisiert.

    – GordonM

    12. Februar 18 um 10:10 Uhr

Eine POST-Anforderung kann eine Abfragezeichenfolge enthalten, normalerweise jedoch nicht – ein Standard-HTML-Formular mit einer POST-Aktion enthält beispielsweise normalerweise keine Abfragezeichenfolge.

  • Ist es sicher, wenn der Beitrag eine Abfragezeichenfolge enthält? Ich meine, wie wäre es mit den Daten, die durch die Abfragezeichenfolge geleitet werden?

    – Yohanim

    23. Juni 21 um 3:50 Uhr


GET sendet die Daten als Abfragezeichenfolge, POST jedoch nicht. Vielmehr wird es im Hauptteil der Anfrage gesendet.

Wenn Ihr Beitrag versucht, die folgende URL zu erreichen

meineseite.php?id=1

Sie haben die POST-Daten, aber auch GET-Daten.

.

758880cookie-checkSenden HTTP-POST-Methoden Daten als QueryString?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy