Soweit ich das beurteilen kann, gibt es drei Kategorien:
- Niemals benutzen
GET
und benutzenPOST
- Niemals benutzen
POST
und benutzenGET
- 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?
Antworten:
Verwendung
POST
für destruktive Aktionen wie Erstellen (ich bin mir der Ironie bewusst), Bearbeiten und Löschen, da SiePOST
in der Adressleiste Ihres Browsers keine Aktion ausführen können. VerwendenGET
Sie diese Option, wenn es sicher ist, dass eine Person eine Aktion aufruft. Also eine URL wie:Sollte Sie zu einer Bestätigungsseite bringen, anstatt den Artikel einfach zu löschen. Unfälle lassen sich auf diese Weise viel einfacher vermeiden.
POST
ist auch sicherer alsGET
, weil Sie keine Informationen in eine URL einfügen. Und so verwendet ,GET
wie diemethod
für ein HTML - Formular , das ein Passwort oder andere vertrauliche Informationen sammelt ist nicht die beste Idee.Ein letzter Hinweis:
POST
Kann eine größere Menge an Informationen übertragen alsGET
. 'POST' unterliegt keinen Größenbeschränkungen für übertragene Daten, während 'GET' auf 2048 Zeichen beschränkt ist.quelle
In Kürze
GET
fürsafe and
idempotent
AnfragenPOST
fürneither safe nor idempotent
AnfragenIm 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
safe
Operation ist eine Operation, dienot change the data
angefordert wird.Eine
idempotent
Operation ist eine Operation, bei der das Ergebnisbe the same
unabhä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.
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).
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.
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.
quelle
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.
quelle
method
obligatorisch macht)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:
Nachteile von GET:
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:
Nachteile von POST:
Längere Version
Direkt aus dem Hypertext Transfer Protocol - HTTP / 1.1 :
quelle
Das erste wichtige ist die Bedeutung von GET gegenüber POST:
Danach ein paar Dinge, die bemerkt werden können:
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 ;-)
quelle
http://example.com/var1/value1/var2/value2/var3/value3
Wir könnten 'technisch' kein GET mehr haben ...www.mypage.com/contact/
verwendet GET intern zu so etwas wieindex.php?url=/contact/
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.
quelle
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.
quelle
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
textarea
s 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.quelle
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.
quelle
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.
quelle
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 :)
quelle
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.
quelle
1.3 Schnelle Checkliste zur Auswahl von HTTP
GET
oderPOST
Verwenden Sie GET, wenn:
Verwenden Sie POST, wenn:
Quelle .
quelle
Die Verwendung zum Aktualisieren des Status - wie ein GET
delete.php?id=5
zum 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.quelle
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
quelle
Aus RFC 2616 :
quelle
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.
quelle
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.
quelle
Lesen Sie den Artikel über HTTP in der Wikipedia . Es wird erklärt, was das Protokoll ist und was es tut:
und
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
und
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.
quelle
In PHP wird das
POST
Datenlimit normalerweise von Ihnen festgelegtphp.ini
.GET
wird meiner Meinung nach durch die Server- / Browsereinstellungen begrenzt - normalerweise um255
Bytes.quelle
Von w3schools.com :
Hier unterscheiden wir die Hauptunterschiede:
quelle
Einfache Version von POST GET PUT DELETE
quelle
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.quelle
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.
quelle
expect: 100-continue
Header durchzuführen und dann erst dann Daten zu senden, wenn der Server mit einem antwortet100 CONTINUE
.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
$_REQUEST
entweder einen Beitrag oder einen Abruf abrufen. Man sollte dies zugunsten der spezifischeren$_GET
oder 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.
quelle
Gorgapor wird
mod_rewrite
immer noch oft verwendetGET
. Es ist nur möglich, eine freundlichere URL in eine URL mit einerGET
Abfragezeichenfolge zu übersetzen .quelle
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:
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.
quelle