Wann verwenden Sie POST und wann verwenden Sie GET?

343

Soweit ich das beurteilen kann, gibt es drei Kategorien:

  1. Niemals benutzen GETund benutzenPOST
  2. Niemals benutzen POSTund benutzenGET
  3. Es spielt keine Rolle, welche Sie verwenden.

Bin ich richtig, wenn ich diese drei Fälle annehme? Wenn ja, was sind einige Beispiele aus jedem Fall?

Thomas Owens
quelle
1
Das ist eigentlich absolut nicht wahr. GET und POST sind beide in gleichem Maße sichtbar. Wenn Sie die von Ihrem Browser gesendeten Header überprüfen, sehen Sie eine Liste der Schlüssel-Wert-Paare, die Sie veröffentlichen
Velimir Tchatchevsky
1
Es gibt keine Standardmethode, um mehr als Name -> Wertepaare in Abfragezeichenfolgen zu codieren. Wenn Ihre Anforderungen nicht sehr einfach sind (dh keine Arrays oder verschachtelten Datenstrukturen), sollten Sie nur POST in Betracht ziehen, das ein Textfeld bereitstellt, das Sie mit Codierungsformaten verwenden können (JSON, XML usw.).
Themihai

Antworten:

376

Verwendung POSTfür destruktive Aktionen wie Erstellen (ich bin mir der Ironie bewusst), Bearbeiten und Löschen, da Sie POSTin der Adressleiste Ihres Browsers keine Aktion ausführen können. Verwenden GETSie diese Option, wenn es sicher ist, dass eine Person eine Aktion aufruft. Also eine URL wie:

http://myblog.org/admin/posts/delete/357

Sollte Sie zu einer Bestätigungsseite bringen, anstatt den Artikel einfach zu löschen. Unfälle lassen sich auf diese Weise viel einfacher vermeiden.

POSTist auch sicherer als GET, weil Sie keine Informationen in eine URL einfügen. Und so verwendet , GETwie die methodfür ein HTML - Formular , das ein Passwort oder andere vertrauliche Informationen sammelt ist nicht die beste Idee.

Ein letzter Hinweis: POSTKann eine größere Menge an Informationen übertragen als GET. 'POST' unterliegt keinen Größenbeschränkungen für übertragene Daten, während 'GET' auf 2048 Zeichen beschränkt ist.

Brian Warshaw
quelle
82
Antworten auf GET-Anfragen werden möglicherweise überprüft. Antworten auf POSTs dürfen nicht.
mkoeller
31
Wie macht es das Einfügen von Informationen in die URL sicherer? (Übrigens bin ich einer von denen, die glauben, dass ein falsches Sicherheitsgefühl gefährlicher ist, als überhaupt keine Sicherheit zu haben).
ePharaoh
42
@ePharaoh: Es verhindert, dass Benutzer Passwörter lesen, indem es über die Schulter des Benutzers in die Adressleiste schaut.
Quentin
35
@ePharaoh: "Etwas weniger Daten einem zufälligen Beobachter aussetzen" wäre wahrscheinlich eine bessere Formulierung als "sicherer" - URLs können an vielen Stellen landen, wie Protokolle, Verweise, Caches. Sie haben natürlich Recht, dies erhöht nicht die Sicherheit - aber es begrenzt die schlimmsten unsicheren Praktiken (siehe auch: thedailywtf.com/Articles/The_Spider_of_Doom.aspx )
Piskvor verließ das Gebäude am
24
@ David Dorward: Oder mit dem gebräuchlicheren Namen: Schulterangriff
Idan K
206

In Kürze

  • Verwendung GETfür safe andidempotentAnfragen
  • Verwendung POSTfür neither safe nor idempotentAnfragen

Im Detail Es gibt für jeden einen richtigen Platz. Selbst wenn Sie sich nicht an RESTful- Prinzipien halten, können Sie viel über REST und die Funktionsweise eines ressourcenorientierten Ansatzes lernen.

Eine RESTful-Anwendung wird use GETsfür Operationen verwendet, die beides sind safe and idempotent.

Eine safeOperation ist eine Operation, die not change the dataangefordert wird.

Eine idempotentOperation ist eine Operation, bei der das Ergebnis be the sameunabhängig davon angezeigt wird , wie oft Sie es anfordern.

Es liegt auf der Hand, dass GETs, die für sichere Operationen verwendet werden, automatisch auch idempotent sind . In der Regel wird ein GET zum Abrufen einer Ressource (z. B. einer Frage und der zugehörigen Antworten zum Stapelüberlauf) oder zum Sammeln von Ressourcen verwendet.

Eine RESTful-App wird PUTsfür Operationen verwendet, die sind not safe but idempotent.

Ich weiß, dass die Frage GET und POST betraf, aber ich werde gleich zu POST zurückkehren.

In der Regel wird ein PUT zum Bearbeiten einer Ressource verwendet (z. B. Bearbeiten einer Frage oder einer Antwort zum Stapelüberlauf).

A POSTwürde für jede Operation verwendet, die ist neither safe or idempotent.

In der Regel wird ein POST verwendet, um eine neue Ressource zu erstellen, beispielsweise um eine NEUE SO-Frage zu erstellen (obwohl in einigen Designs auch hierfür ein PUT verwendet wird).

Wenn Sie den POST zweimal ausführen, werden am Ende ZWEI neue Fragen erstellt.

Es gibt auch eine DELETE-Operation, aber ich schätze, ich kann das dort lassen :)

Diskussion

In der Praxis unterstützen moderne Webbrowser GET und POST normalerweise nur zuverlässig (Sie können alle diese Vorgänge über Javascript-Aufrufe ausführen, aber in Bezug auf die Eingabe von Daten in Formulare und das Drücken von Senden haben Sie im Allgemeinen die beiden Optionen). In einer RESTful-Anwendung wird der POST häufig überschrieben, um auch die PUT- und DELETE-Aufrufe bereitzustellen.

Aber selbst wenn Sie nicht den RESTful-Prinzipien folgen, kann es hilfreich sein, GET zum Abrufen / Anzeigen von Informationen und POST zum Erstellen / Bearbeiten von Informationen zu verwenden.

Sie sollten GET niemals für eine Operation verwenden, die Daten ändert. Wenn eine Suchmaschine einen Link zu Ihrer bösen Operation oder den Lesezeichen des Kunden crawlt, kann dies zu großen Problemen führen.

reefnet_alex
quelle
Wenn Sie eine APIREST-Ressource für die Anmeldung erstellen, die Sie auswählen, ist dies sicher und idempotent, ich gastiere es.
Jhonny Lopez
1
Ein sicherer Zugriff ist nicht automatisch idempotent. Die Ergebnismenge kann bei derselben zerstörungsfreien Abfrage unterschiedlich sein.
RichieHH
1
So wie Sie es geschrieben haben, wäre so etwas wie "GET currenttime" falsch, weil es nicht idempotent ist (in dem Sinne, dass wiederholte Abfragen zu unterschiedlichen Ergebnissen führen können). Tatsächlich kann sich alles , was abgefragt wird, im Laufe der Zeit ändern. Man sollte also Idempotenz eher in Form von Nebenwirkungen der Abfrage selbst ausdrücken . Da das bloße Nachfragen nach der aktuellen Zeit keine Nebenwirkungen hat , ist dies - wie zu erwarten - ein perfekter Kandidat für GET und nicht für POST.
Hagen von Eitzen
79

Verwenden Sie GET, wenn Sie nichts dagegen haben, dass die Anforderung wiederholt wird (dh, der Status ändert sich nicht).

Verwenden Sie POST, wenn der Vorgang den Systemstatus ändert.

Douglas Leeder
quelle
1
Warum ist die Standardmethode des HTML-Formular-Tags GET, da ein Formular den Systemstatus ändert?
Ziiweb
3
@ user248959 Ändert ein Suchfeld den sichtbaren Status? Die Standardeinstellung wurde vor langer Zeit festgelegt, wahrscheinlich fast zufällig. Ich habe mich nicht mit der Geschichte befasst, um überhaupt zu wissen, ob POST eine Option war, als Formulare eine Option waren.
Douglas Leeder
@ziiweb Auch wenn die meisten Anwendungsfälle von <form> POST sind, ist es besser, den Dafault als "harmloses" GET zu definieren. Dies mag unter Sicherheitsgesichtspunkten absurd erscheinen, wenn es zu Daten führt, die in Protokolldateien usw. verfügbar gemacht werden, ist jedoch in Bezug auf die serverseitigen Daten ausfallsicher (der Serve sollte keine Daten auf einem GET ändern). Ich nehme an, man würde den Fokus heute anders einstellen (vorzugsweise indem man einen Standard fallen lässt und methodobligatorisch macht)
Hagen von Eitzen
Angenommen, ich habe einen Endpunkt, der eine Datei als Eingabe akzeptiert, die Datei verarbeitet (Beispiel - Daten basierend auf Regex extrahieren) und JSON-Daten zurückgibt. Dann kann ich die GET-Anforderung verwenden, um eine Datei auf den Server hochzuladen. Oder sollte ich eine POST-Anfrage verwenden?
Variable
67

Kurzfassung

GET: Wird normalerweise für übermittelte Suchanfragen oder für Anfragen verwendet, bei denen der Benutzer die genaue Seite erneut aufrufen kann.

Vorteile von GET:

  • URLs können sicher mit Lesezeichen versehen werden.
  • Seiten können sicher neu geladen werden.

Nachteile von GET:

  • Variablen werden als Name-Wert-Paare durch die URL übergeben. (Sicherheitsrisiko)
  • Begrenzte Anzahl von Variablen, die übergeben werden können. (Basierend auf dem Browser. Beispielsweise ist der Internet Explorer auf 2.048 Zeichen beschränkt. )

POST: Wird für Anforderungen mit höherer Sicherheit verwendet, bei denen Daten zum Ändern einer Datenbank oder einer Seite verwendet werden können, für die kein Lesezeichen erstellt werden soll.

Vorteile von POST:

  • Name-Wert-Paare werden in der URL nicht angezeigt. (Sicherheit + = 1)
  • Eine unbegrenzte Anzahl von Name-Wert-Paaren kann per POST übergeben werden. Referenz.

Nachteile von POST:

  • Seite, die POST-Daten verwendet hat, kann kein Lesezeichen sein. (Wenn Sie es wünschen.)

Längere Version

Direkt aus dem Hypertext Transfer Protocol - HTTP / 1.1 :

9.3 GET

Die GET-Methode bedeutet, dass alle Informationen (in Form einer Entität) abgerufen werden, die durch den Request-URI identifiziert werden. Wenn sich der Anforderungs-URI auf einen Datenerzeugungsprozess bezieht, sind es die erzeugten Daten, die als Entität in der Antwort und nicht als Quelltext des Prozesses zurückgegeben werden sollen, es sei denn, dieser Text ist zufällig die Ausgabe des Prozesses.

Die Semantik der GET-Methode ändert sich in ein "bedingtes GET", wenn die Anforderungsnachricht ein Headerfeld "If-Modified-Since", "If-Unmodified-Since", "If-Match", "If-None-Match" oder "If-Range" enthält. Eine bedingte GET-Methode fordert an, dass die Entität nur unter den in den bedingten Headerfeldern beschriebenen Umständen übertragen wird. Die bedingte GET-Methode soll die unnötige Netzwerknutzung reduzieren, indem zwischengespeicherte Entitäten aktualisiert werden können, ohne dass mehrere Anforderungen erforderlich sind oder bereits vom Client gehaltene Daten übertragen werden.

Die Semantik der GET-Methode ändert sich in ein "partielles GET", wenn die Anforderungsnachricht ein Bereichskopffeld enthält. Ein Teil-GET fordert, dass nur ein Teil der Entität übertragen wird, wie in Abschnitt 14.35 beschrieben. Die partielle GET-Methode soll die unnötige Netzwerknutzung reduzieren, indem teilweise abgerufene Entitäten abgeschlossen werden können, ohne dass bereits vom Client gehaltene Daten übertragen werden.

Die Antwort auf eine GET-Anforderung kann nur dann zwischengespeichert werden, wenn sie die in Abschnitt 13 beschriebenen Anforderungen für das HTTP-Caching erfüllt.

In Abschnitt 15.1.3 finden Sie Sicherheitsaspekte bei Verwendung für Formulare.

9.5 POST

Die POST-Methode wird verwendet, um anzufordern, dass der Ursprungsserver die in der Anforderung enthaltene Entität als neuen Untergebenen der durch den Anforderungs-URI in der Anforderungszeile identifizierten Ressource akzeptiert. POST wurde entwickelt, um eine einheitliche Methode zu ermöglichen, die die folgenden Funktionen abdeckt:

  • Anmerkung zu vorhandenen Ressourcen;

  • Senden einer Nachricht an ein Schwarzes Brett, eine Newsgroup, eine Mailingliste oder eine ähnliche Artikelgruppe;

  • Bereitstellen eines Datenblocks, z. B. des Ergebnisses des Absendens eines Formulars, für einen Datenverarbeitungsprozess;

  • Erweitern einer Datenbank durch Anhängen.

Die tatsächliche Funktion der POST-Methode wird vom Server festgelegt und hängt normalerweise vom Request-URI ab. Die veröffentlichte Entität ist dieser URI auf dieselbe Weise untergeordnet, wie eine Datei einem Verzeichnis untergeordnet ist, in dem sie enthalten ist, ein Nachrichtenartikel einer Newsgroup untergeordnet ist, in der sie veröffentlicht wurde, oder ein Datensatz einer Datenbank untergeordnet ist.

Die von der POST-Methode ausgeführte Aktion führt möglicherweise nicht zu einer Ressource, die durch einen URI identifiziert werden kann. In diesem Fall ist entweder 200 (OK) oder 204 (kein Inhalt) der geeignete Antwortstatus, je nachdem, ob die Antwort eine Entität enthält, die das Ergebnis beschreibt oder nicht.

Cimplicity
quelle
2
"Seite, auf der Post-Daten verwendet wurden, kann nicht mit einem Lesezeichen versehen werden": Nun, das ist ein Vorteil, nein? Sie möchten wahrscheinlich nicht, dass Ihre Datenänderungsabfrage mit einem Lesezeichen versehen wird.
Piskvor verließ das Gebäude am
Ich nehme an, wenn Sie jedes Mal, wenn ein Beitrag verwendet wurde, ihn für sicherheitsrelevante Zwecke verwenden würden, wäre dies ein Vorteil. Normalerweise ist es das, aber es gibt diese Längenbeschränkung für GET. Vielleicht übergibt jemand nur eine Menge nicht sicherheitsrelevanter Daten und möchte, dass die Seite mit einem Lesezeichen versehen wird? Wer weiß ...
Cimplicity
Würde MVC dieses Problem in Bezug auf einen Nachteil von GET, nämlich "Variablen werden als Name-Wert-Paare durch die URL geleitet", aufgrund des Routings und der daraus resultierenden benutzerfreundlichen URLs beseitigen?
MrBoJangles
@ MrBoJangles: Die Verwendung netter URLs verhindert nicht, dass das Risiko "Person, die über die Schulter schaut" erwähnt wird. Randnotiz: MVC erfordert kein Routing mit netten URLs und Routing mit netten URLs erfordert kein MVC. Sie werden manchmal zusammen verwendet, können aber auch separat verwendet werden.
icktoofay
In der .NET-Welt ist für alle praktischen Zwecke eine nette URL-Fähigkeit = MVC. Ich nehme an, Sie könnten einige IIS-Umschreibungen oder einige seltsame Code-basierte Änderungen vornehmen, aber sie sind noch weniger angenehm. Natürlich MVC für den Sieg.
MrBoJangles
28

Das erste wichtige ist die Bedeutung von GET gegenüber POST:

  • GET sollte verwendet werden, um ... einige Informationen von zu erhalten Server zu erhalten,
  • POST sollte verwendet werden, um einige Informationen an den Server zu senden .


Danach ein paar Dinge, die bemerkt werden können:

  • Mit GET können Ihre Benutzer die Schaltfläche "Zurück" in ihrem Browser verwenden und Seiten mit Lesezeichen versehen
  • Die Größe der Parameter, die Sie als GET übergeben können, ist begrenzt (2 KB für einige Versionen von Internet Explorer, wenn ich mich nicht irre) . Das Limit für POST ist viel höher und hängt im Allgemeinen von der Serverkonfiguration ab.


Wie auch immer, ich glaube nicht, dass wir ohne GET "leben" könnten: Überlegen Sie, wie viele URLs Sie jeden Tag mit Parametern in der Abfragezeichenfolge verwenden - ohne GET würden all diese nicht funktionieren ;-)

Pascal MARTIN
quelle
Nun, wenn jeder hübsche URLs in einem GET-Stil verwenden würde: http://example.com/var1/value1/var2/value2/var3/value3Wir könnten 'technisch' kein GET mehr haben ...
Tyler Carter
5
@ Chacha102 Außer, dass Sie diese Ressource noch erhalten müssen. Nahezu alle Seiten, Bilder, Skripte usw. werden mit GET in Webbrowsern geladen.
Ryan
3
@ Chacha102 - Auch die www.mypage.com/contact/verwendet GET intern zu so etwas wieindex.php?url=/contact/
Thiago Belem
1
Schwerpunkt auf der Größenbeschränkung von GET! Außerdem sind GET-Parameter in Lesezeichen enthalten, POST hingegen nicht. Der Benutzer kann eine von GET angeforderte Seite aktualisieren, jedoch keine von POST angeforderte (ohne Warnung vor dem erneuten Senden der Informationen).
Ricket
12

Abgesehen von den Unterschieden bei den Längenbeschränkungen in vielen Webbrowsern gibt es auch einen semantischen Unterschied. GETs sollen "sicher" sein, da es sich um schreibgeschützte Vorgänge handelt, die den Serverstatus nicht ändern. POSTs ändern normalerweise ihren Status und geben bei erneuter Übermittlung Warnungen aus. Die Webcrawler von Suchmaschinen können GETs erstellen, sollten jedoch niemals POSTs erstellen.

Verwenden Sie GET, wenn Sie Daten lesen möchten, ohne den Status zu ändern, und POST, wenn Sie den Status auf dem Server aktualisieren möchten.

Mark Byers
quelle
+1. Dies ist der wesentliche konzeptionelle Unterschied zu dem RFC, aus dem alles andere folgt. w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3
Frank Farmer
8

Meine allgemeine Faustregel lautet: Get verwenden, wenn Sie Anforderungen an den Server stellen, die den Status nicht ändern. Beiträge sind für Anfragen an den Server reserviert, die den Status ändern.

TonyLa
quelle
8

Ein praktischer Unterschied besteht darin, dass die Anzahl der Zeichen, die in einer URL vorhanden sein können, in Browsern und Webservern begrenzt ist. Es ist von Anwendung zu Anwendung unterschiedlich, aber es ist sicherlich möglich, es zu treffen, wenn Sie textareas in Ihren Formularen haben.

Ein weiteres Problem mit GETs: Sie werden von Suchmaschinen und anderen automatischen Systemen indiziert. Google hatte einmal ein Produkt, das Links auf der angezeigten Seite vorab abruft, sodass sie schneller geladen werden können, wenn Sie auf diese Links klicken. Es verursachte großes Chaos auf Websites mit Links wie delete.php?id=1- Menschen haben ihre gesamten Websites verloren.

ceejayoz
quelle
1
Ihr Webserver hat wahrscheinlich auch Grenzen.
Billy ONeal
Nun, es gibt auch eine Grenze für POST.
Chelmertz
1
Toller Punkt, @BillyONeal, das habe ich hinzugefügt. @Celmertz Ja, aber ich kann das ändern, wenn ich will, und es ist viel höher. Ich habe zum Beispiel 1 Gigabyte-Dateien an Apache-Instanzen gesendet.
Ceejayoz
Ich verstehe, dass URLs von Suchmaschinen indiziert werden. Ich verstehe nicht, was das mit GET zu tun hat. Ich meine, ist eine URL nicht nur eine URL?
Honig
1
@Honey Suchmaschinen folgen Links. Links stellen GET-Anfragen. Suchmaschinen senden keine Formulare (wenn dies der Fall ist, wird Google alle paar Tage für ein Konto auf Ihrer Website angemeldet) und stellen daher keine POST-Anfragen.
Ceejayoz
7

Verwenden Sie GET, wenn die URL den Status der Seite widerspiegeln soll. Dies ist nützlich, um dynamisch generierte Seiten wie die hier gezeigten anzuzeigen. Ein POST sollte in einem Formular zum Übermitteln von Daten verwendet werden, z. B. wenn ich auf die Schaltfläche "Antwort posten" klicke. Außerdem wird eine sauberere URL erstellt, da nach dem Pfad keine Parameterzeichenfolge generiert wird.

Kyle Cronin
quelle
6

Da es sich bei GETs um reine URLs handelt, können sie vom Webbrowser zwischengespeichert werden und besser für Dinge wie konsistent generierte Bilder verwendet werden. (Legen Sie eine Ablaufzeit fest.)

Ein Beispiel von der Gravatar-Seite: http://www.gravatar.com/avatar/4c3be63a4c2f539b013787725dfce802?d=monsterid

GET kann zu einer geringfügig besseren Leistung führen. Einige Webserver schreiben POST-Inhalte in eine temporäre Datei, bevor sie den Handler aufrufen.

Eine andere zu berücksichtigende Sache ist die Größenbeschränkung. GETs werden durch die Größe der URL begrenzt, standardmäßig durch 1024 Byte, obwohl Browser möglicherweise mehr unterstützen.

Wenn Sie mehr Daten übertragen, sollte ein POST verwendet werden, um eine bessere Browserkompatibilität zu erzielen.

Noch weniger als diese Grenze ist ein Problem, wie ein anderes Poster schrieb, alles in der URL könnte in anderen Teilen der Benutzeroberfläche des Browsers landen, wie zum Beispiel in der Geschichte.

davenpcj
quelle
4

Es gibt nichts, was Sie per se nicht tun können. Der Punkt ist, dass Sie den Serverstatus auf einem HTTP-GET nicht ändern sollen . HTTP-Proxys gehen davon aus, dass es keinen Unterschied macht, ob ein Benutzer HTTP GET einmal oder 1000 Mal aufruft, da HTTP GET den Status nicht ändert. Anhand dieser Informationen wird davon ausgegangen, dass es sicher ist, eine zwischengespeicherte Version des ersten HTTP-GET zurückzugeben. Wenn Sie die HTTP-Spezifikation brechen, besteht die Gefahr, dass der HTTP-Client und die Proxys in freier Wildbahn beschädigt werden. Tu es nicht :)

Gili
quelle
Es sind nicht nur Browser, die darauf zählen, dass GET sicher und idempotent ist. Auch Suchmaschinenspinnen und Browser, die vorab abgerufen werden (wie schnellerfox), verlassen sich darauf.
Frank Farmer
@gili, endlich jemand mit der richtigen Antwort. Ich bin wirklich überrascht, wie viele Leute das falsch verstanden haben. Daumen hoch!
Lubos Hasko
4

Dies geht in das Konzept von REST über und wie das Web irgendwie genutzt werden sollte. Es gibt einen ausgezeichneten Podcast im Radio Software Engineering, der einen ausführlichen Vortrag über die Verwendung von Get and Post gibt.

Get wird verwendet, um Daten vom Server abzurufen, auf denen keine Aktualisierungsaktion erforderlich sein sollte. Die Idee ist, dass Sie in der Lage sein sollten, dieselbe GET-Anforderung immer wieder zu verwenden und dieselben Informationen zurückzugeben. Die URL enthält die Informationen zum Abrufen in der Abfragezeichenfolge, da sie problemlos an andere Systeme und Personen gesendet werden sollte, z. B. eine Adresse, an der etwas zu finden ist.

Post soll (zumindest von der REST-Architektur, auf der das Web basiert) verwendet werden, um Informationen an den Server zu senden / den Server anzuweisen, eine Aktion auszuführen. Beispiele wie: Aktualisieren Sie diese Daten, Erstellen Sie diesen Datensatz.

kemiller2002
quelle
"Es gibt einen ausgezeichneten Podcast im Software Engineering Radio, der einen ausführlichen Vortrag über die Verwendung von Get and Post gibt." Wo ist es?
Yeeen
Ich habe einen Link hinzugefügt.
Kemiller2002
Hier ist diese Verknüpfung: se-radio.net/2008/05/episode-98-stefan-tilkov-on-rest Ich habe auch den obigen Link bearbeitet, obwohl ich keine Bearbeitungsrechte habe und er einer Peer-Review unterzogen werden muss usw.
MrBoJangles
Angenommen, ich habe einen Endpunkt, der eine Datei als Eingabe akzeptiert, die Datei verarbeitet (Beispiel - Daten basierend auf Regex extrahieren) und JSON-Daten zurückgibt. Dann kann ich die GET-Anforderung verwenden, um eine Datei auf den Server hochzuladen. Oder sollte ich eine POST-Anfrage verwenden?
Variable
4

1.3 Schnelle Checkliste zur Auswahl von HTTP GEToderPOST

Verwenden Sie GET, wenn:

    The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).

Verwenden Sie POST, wenn:

    The interaction is more like an order, or
    The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or
    The user be held accountable for the results of the interaction.

Quelle .

Anagha
quelle
3

Ich sehe kein Problem mit get, aber ich benutze es für einfache Dinge, bei denen es sinnvoll ist, Dinge in der Abfragezeichenfolge zu halten.

Die Verwendung zum Aktualisieren des Status - wie ein GET delete.php?id=5zum Löschen einer Seite - ist sehr riskant. Die Leute fanden das heraus, als Googles Webbeschleuniger anfing, URLs auf Seiten vorab abzurufen - er traf alle "Löschen" -Links und löschte die Daten der Leute. Gleiches kann mit Suchmaschinenspinnen passieren.

ceejayoz
quelle
3

POST kann große Datenmengen verschieben, GET nicht.

Aber im Allgemeinen geht es nicht um einen Mangel an GET, sondern um eine Konvention, wenn Sie möchten, dass sich Ihre Website / Webanwendung gut verhält.

Schauen Sie sich http://www.w3.org/2001/tag/doc/whenToUseGet.html an

Cherouvim
quelle
3

Aus RFC 2616 :

9.3 GET
Die GET-Methode bedeutet, dass alle Informationen (in Form einer Entität) abgerufen werden, die durch den Request-URI identifiziert werden. Wenn sich der Anforderungs-URI auf einen Datenerzeugungsprozess bezieht, sind es die erzeugten Daten, die als Entität in der Antwort und nicht als Quelltext des Prozesses zurückgegeben werden sollen, es sei denn, dieser Text ist zufällig die Ausgabe des Prozesses.


9.5 POST
Mit der POST-Methode wird angefordert, dass der Ursprungsserver die in der Anforderung enthaltene Entität als neuen Untergebenen der Ressource akzeptiert, die durch den Anforderungs-URI in der Anforderungszeile identifiziert wird. POST wurde entwickelt, um eine einheitliche Methode zu ermöglichen, die die folgenden Funktionen abdeckt:

  • Anmerkung zu vorhandenen Ressourcen;
  • Senden einer Nachricht an ein Schwarzes Brett, eine Newsgroup, eine Mailingliste oder eine ähnliche Artikelgruppe;
  • Bereitstellen eines Datenblocks, z. B. des Ergebnisses des Absendens eines Formulars, für einen Datenverarbeitungsprozess;
  • Erweitern einer Datenbank durch Anhängen.

Die tatsächliche Funktion der POST-Methode wird vom Server festgelegt und hängt normalerweise vom Request-URI ab. Die veröffentlichte Entität ist dieser URI auf dieselbe Weise untergeordnet, wie eine Datei einem Verzeichnis untergeordnet ist, in dem sie enthalten ist, ein Nachrichtenartikel einer Newsgroup untergeordnet ist, in der sie veröffentlicht wurde, oder ein Datensatz einer Datenbank untergeordnet ist.

Die von der POST-Methode ausgeführte Aktion führt möglicherweise nicht zu einer Ressource, die durch einen URI identifiziert werden kann. In diesem Fall ist entweder 200 (OK) oder 204 (kein Inhalt) der geeignete Antwortstatus, je nachdem, ob die Antwort eine Entität enthält, die das Ergebnis beschreibt oder nicht.

Dmytro
quelle
2

Ich verwende POST, wenn ich nicht möchte, dass Leute den QueryString sehen, oder wenn der QueryString groß wird. Außerdem wird POST für das Hochladen von Dateien benötigt.

Ich sehe jedoch kein Problem bei der Verwendung von GET. Ich verwende es für einfache Dinge, bei denen es sinnvoll ist, Dinge auf dem QueryString zu belassen.

Die Verwendung von GET ermöglicht auch das Verknüpfen mit einer bestimmten Seite, auf der POST nicht funktionieren würde.

John Boker
quelle
Warum können wir GET nicht zum Hochladen von Dateien verwenden?
Variable
1

Die ursprüngliche Absicht war, dass GET verwendet wurde, um Daten zurückzubekommen, und POST sollte alles sein. Als Faustregel gilt, dass ich POST verwende, wenn ich etwas an den Server zurücksende. Wenn ich nur eine URL aufrufe, um Daten zurückzugewinnen, verwende ich GET.

Chris Miller
quelle
1

Lesen Sie den Artikel über HTTP in der Wikipedia . Es wird erklärt, was das Protokoll ist und was es tut:

ERHALTEN

Fordert eine Darstellung der angegebenen Ressource an. Beachten Sie, dass GET nicht für Vorgänge verwendet werden sollte, die Nebenwirkungen verursachen, z. B. zum Ausführen von Aktionen in Webanwendungen. Ein Grund dafür ist, dass GET von Robotern oder Crawlern willkürlich verwendet werden kann, wobei die Nebenwirkungen, die eine Anforderung verursachen sollte, nicht berücksichtigt werden müssen.

und

POST Sendet zu verarbeitende Daten (z. B. aus einem HTML-Formular) an die identifizierte Ressource. Die Daten sind im Hauptteil der Anfrage enthalten. Dies kann zur Erstellung einer neuen Ressource oder zur Aktualisierung vorhandener Ressourcen oder zu beidem führen.

Das W3C verfügt über ein Dokument mit den Namen URIs, Adressierbarkeit und Verwendung von HTTP GET und POST , in dem erläutert wird, wann was verwendet werden soll. Zitieren

1.3 Schnelle Checkliste zur Auswahl von HTTP GET oder POST

  • Verwenden Sie GET, wenn:
    • Die Interaktion ähnelt eher einer Frage (dh es handelt sich um eine sichere Operation wie eine Abfrage, eine Leseoperation oder eine Suche).

und

  • Verwenden Sie POST, wenn:
    • Die Interaktion ist eher wie eine Bestellung, oder
    • Die Interaktion ändert den Status der Ressource auf eine Weise, die der Benutzer wahrnehmen würde (z. B. ein Abonnement für einen Dienst), oder o Der Benutzer wird für die Ergebnisse der Interaktion zur Rechenschaft gezogen.

Berücksichtigen Sie jedoch vor der endgültigen Entscheidung für die Verwendung von HTTP GET oder POST auch Überlegungen zu vertraulichen Daten und praktische Überlegungen.

Ein praktisches Beispiel wäre, wenn Sie ein HTML-Formular einreichen. Sie geben entweder post oder get für die Formularaktion an. PHP füllt $ _GET und $ _POST entsprechend aus.

Gordon
quelle
1

In PHP wird das POSTDatenlimit normalerweise von Ihnen festgelegt php.ini. GETwird meiner Meinung nach durch die Server- / Browsereinstellungen begrenzt - normalerweise um 255Bytes.

Quallenbaum
quelle
1

Von w3schools.com :

Was ist HTTP?

Das Hypertext Transfer Protocol (HTTP) ermöglicht die Kommunikation zwischen Clients und Servern.

HTTP fungiert als Anforderungs-Antwort-Protokoll zwischen einem Client und einem Server.

Ein Webbrowser kann der Client sein, und eine Anwendung auf einem Computer, auf dem eine Website gehostet wird, kann der Server sein.

Beispiel: Ein Client (Browser) sendet eine HTTP-Anfrage an den Server. Dann gibt der Server eine Antwort an den Client zurück. Die Antwort enthält Statusinformationen zur Anforderung und kann auch den angeforderten Inhalt enthalten.

Zwei HTTP-Anforderungsmethoden: GET und POST

Zwei häufig verwendete Methoden für eine Anforderungsantwort zwischen einem Client und einem Server sind: GET und POST.

GET - Fordert Daten von einer angegebenen Ressource an. POST - Sendet Daten zur Verarbeitung an eine angegebene Ressource

Hier unterscheiden wir die Hauptunterschiede:

Geben Sie hier die Bildbeschreibung ein

Madhusudhan Reddy
quelle
1
Für Suchende und Leser wäre es viel besser, den Inhalt des Bildes in die Antwort einzugeben. Außerdem hilft der erste Teil der Antwort bei der Beantwortung der Frage nicht wirklich.
Dave Schweisguth
Kopieren und Einfügen von hier - Sie müssen Ihre Quelle korrekt zitieren und die Lizenz der Quelle muss die Wiederverwendung ermöglichen, was meiner Meinung nach w3schools nicht tut. Glauben Sie wirklich, dass dies etwas hinzufügt, das in den anderen 25 Antworten nicht behandelt wurde?
Benjamin W.
1

Einfache Version von POST GET PUT DELETE

  • Verwenden Sie GET - wenn Sie eine Ressource wie eine Liste von Daten basierend auf einer ID oder einem Namen erhalten möchten
  • POST verwenden - wenn Sie Daten an den Server senden möchten. Denken Sie daran, dass POST eine schwere Operation ist, da wir für die Aktualisierung PUT anstelle von POST verwenden sollten. POST erstellt intern neue Ressourcen
  • benutze PUT - wenn du
Rajesh
quelle
4
"benutze PUT - wenn du" Wo ist der Rest des Satzes?
Pang
Es ist großartig, dass jemand die ersten beiden Kugeln dieser Antwort anscheinend so sehr mochte, dass er sie ohne die letzte Kugel positiv bewertet hat, haha: '-)
pooley1994
0

Nun, eine wichtige Sache ist, dass alles, was Sie übermitteln GET, über die URL verfügbar gemacht wird. Zweitens gibt es, wie Ceejayoz sagt, eine Beschränkung für Zeichen für eine URL.

prodigitalson
quelle
0

Ein weiterer Unterschied besteht darin, dass POST im Allgemeinen zwei HTTP-Operationen erfordert, während GET nur eine erfordert.

Edit: Ich sollte klarstellen - für gängige Programmiermuster. Im Allgemeinen ist die Beantwortung eines POST mit einer direkten HTML-Webseite aus verschiedenen Gründen ein fragwürdiges Design. Einer davon ist das ärgerliche "Sie müssen dieses Formular erneut einreichen, möchten Sie dies tun?" beim Drücken der Zurück-Taste.

Plynx
quelle
2
POST erfordert keine 2 http-Operationen.
Billy ONeal
3
Post-Redirect-Get erfordert 2 Operationen: en.wikipedia.org/wiki/Post/Redirect/Get
Cherouvim
1
Für den POST sind möglicherweise zwei Roundtrips zum Server erforderlich. Ein häufiges Muster besteht darin, einen POST mit einem expect: 100-continueHeader durchzuführen und dann erst dann Daten zu senden, wenn der Server mit einem antwortet 100 CONTINUE.
Frank Farmer
Schöner Artikel Cherouvim, ich wusste nie, dass das Muster einen Namen hat.
Plynx
@cherouvim: Post Redirect get tut, aber einfache Post nicht. Sie könnten genauso einfach umleiten lassen, um die gleichen Ergebnisse zu erzielen. Es hat nichts mit dem Protokoll zu tun, das Ihr Formular für die Übermittlung verwendet.
Billy ONeal
0

Wie von anderen beantwortet, ist die URL-Größe mit get begrenzt, und Dateien können nur per Post eingereicht werden.

Ich möchte hinzufügen, dass man kann Dinge in eine Datenbank mit einem Get hinzufügen und Aktionen mit einem Post. Wenn ein Skript einen Beitrag oder ein Get erhält, kann es tun, was der Autor möchte. Ich glaube, der Mangel an Verständnis beruht auf dem Wortlaut, den das Buch gewählt hat oder wie Sie es gelesen haben.

Ein Drehbuchautor sollte Beiträge verwenden, um die Datenbank zu ändern, und get nur zum Abrufen von Informationen verwenden.

Skriptsprachen boten viele Möglichkeiten, auf die Anfrage zuzugreifen. Mit PHP können Sie beispielsweise $_REQUESTentweder einen Beitrag oder einen Abruf abrufen. Man sollte dies zugunsten der spezifischeren $_GEToder vermeiden $_POST.

In der Webprogrammierung gibt es viel mehr Interpretationsspielraum. Es gibt, was man tun sollte und was man tun kann , aber welches besser ist, steht oft zur Debatte. Zum Glück gibt es in diesem Fall keine Mehrdeutigkeit. Sie sollten Beiträge verwenden, um Daten zu ändern, und Sie sollten get verwenden, um Informationen abzurufen.

Elizabeth Buckwalter
quelle
0

Gorgapor wird mod_rewriteimmer noch oft verwendet GET. Es ist nur möglich, eine freundlichere URL in eine URL mit einer GETAbfragezeichenfolge zu übersetzen .

Brian Warshaw
quelle
-1

Für HTTP-Post-Daten ist die Datenmenge nicht begrenzt, da für verschiedene Browser unterschiedliche Grenzwerte für GETs gelten. Der RFC 2068 besagt:

Server sollten in Bezug auf URI-Längen über 255 Byte vorsichtig sein, da einige ältere Client- oder Proxy-Implementierungen diese Längen möglicherweise nicht richtig unterstützen

Insbesondere sollten Sie die richtigen HTTP-Konstrukte für das verwenden, wofür sie verwendet werden. HTTP-GETs sollten keine Nebenwirkungen haben und können von HTTP-Proxies usw. sicher aktualisiert und gespeichert werden.

HTTP-POSTs werden verwendet, wenn Sie Daten für eine URL-Ressource senden möchten.

Ein typisches Beispiel für die Verwendung von HTTP GET ist eine Suche, dh Suche? Abfrage = meine + Abfrage Ein typisches Beispiel für die Verwendung eines HTTP-POST ist das Senden von Feedback an ein Online-Formular.

Mythos
quelle