409 Stimmen

Wann verwenden Sie POST und wann GET?

Soweit ich das beurteilen kann, gibt es drei Kategorien:

  1. Verwenden Sie niemals GET und verwenden POST
  2. Verwenden Sie niemals POST und verwenden GET
  3. Es spielt keine Rolle, welche Sie verwenden.

Liege ich mit der Annahme dieser drei Fälle richtig? Wenn ja, was sind einige Beispiele für jeden Fall?

446voto

Brian Warshaw Punkte 21916

Utilisez POST für zerstörerische Aktionen wie das Erstellen (ich bin mir der Ironie bewusst), Bearbeiten und Löschen, denn man kann nicht auf eine POST in der Adressleiste Ihres Browsers. verwenden GET wann es sicher ist, einer Person zu erlauben, eine Aktion aufzurufen. Also eine URL wie:

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

Sollte Sie zu einer Bestätigungsseite führen, anstatt den Artikel einfach zu löschen. Auf diese Weise lassen sich Unfälle viel leichter vermeiden.

POST ist auch sicherer als GET weil Sie die Informationen nicht in eine URL einfügen. Und so verwendet man GET als die method für ein HTML-Formular, das ein Kennwort oder andere vertrauliche Informationen erfasst, ist nicht die beste Idee.

Eine letzte Anmerkung: POST eine größere Menge an Informationen übertragen kann als GET . Bei "POST" gibt es keine Größenbeschränkungen für die übermittelten Daten, während "GET" auf 2048 Zeichen begrenzt ist.

248voto

reefnet_alex Punkte 9525

In Kürze

  • Utilisez GET para safe andidempotent Anfragen
  • Utilisez POST para neither safe nor idempotent Anfragen

Im Detail Für jeden gibt es einen angemessenen Platz. Auch wenn Sie nicht folgen RESTful Prinzipien kann man viel gewinnen, wenn man sich mit REST und der Funktionsweise eines ressourcenorientierten Ansatzes vertraut macht.

Eine RESTful-Anwendung wird use GETs für Vorgänge, die sowohl safe and idempotent .

A safe Operation ist eine Operation, die not change the data angefordert.

Eine idempotent Vorgang ist ein Vorgang, bei dem das Ergebnis be the same egal, wie oft Sie es anfordern.

Es liegt auf der Hand, dass, da GETs verwendet werden sicher Operationen sind sie automatisch auch idempotent . Normalerweise wird ein GET verwendet, um eine Ressource (z. B. eine Frage und die dazugehörigen Antworten auf Stack Overflow) oder eine Sammlung von Ressourcen abzurufen.

Eine RESTful-Anwendung verwendet PUTs für Vorgänge, die not safe but idempotent .

Ich weiß, die Frage bezog sich auf GET und POST, aber ich werde gleich auf POST zurückkommen.

Ein PUT wird in der Regel zur Bearbeitung einer Ressource verwendet (z. B. zur Bearbeitung einer Frage oder einer Antwort auf Stack Overflow).

A POST würde für jeden Vorgang verwendet werden, der neither safe or idempotent .

Normalerweise wird ein POST verwendet, um eine neue Ressource zu erstellen, z. B. eine NEUE SO-Frage (obwohl in einigen Designs auch ein PUT dafür verwendet werden kann).

Wenn Sie den POST zweimal ausführen, würden Sie am Ende ZWEI neue Fragen erstellen.

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

Diskussion

In der Praxis unterstützen moderne Webbrowser in der Regel nur GET und POST zuverlässig (Sie können alle diese Operationen über Javascript-Aufrufe durchführen, aber wenn Sie Daten in Formulare eingeben und auf "Submit" drücken, haben Sie in der Regel nur diese beiden Optionen). In einer RESTful-Anwendung wird POST oft überschrieben, um auch die PUT- und DELETE-Aufrufe bereitzustellen.

Aber auch wenn Sie sich nicht an die RESTful-Prinzipien halten, kann es sinnvoll 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 verändert. Wenn eine Suchmaschine einen Link zu Ihrer bösartigen Operation findet oder der Kunde ein Lesezeichen setzt, könnte das großen Ärger bedeuten.

85voto

Douglas Leeder Punkte 50423

Verwenden Sie GET, wenn es Ihnen nichts ausmacht, dass die Anfrage wiederholt wird (d. h. der Status wird nicht geändert).

Verwenden Sie POST, wenn der Vorgang den Zustand des Systems ändert.

70voto

Cimplicity Punkte 2681

Kurzfassung

GET: Wird in der Regel für übermittelte Suchanfragen verwendet, oder für alle Anfragen, bei denen der Benutzer die genaue Seite wieder aufrufen soll.

Vorteile von GET:

  • URLs können sicher mit Lesezeichen versehen werden.
  • Die Seiten können sicher nachgeladen werden.

Nachteile von GET:

POST: Wird für Anfragen mit höherer Sicherheit verwendet, bei denen Daten zur Änderung einer Datenbank oder einer Seite verwendet werden können, von der Sie nicht möchten, dass jemand ein Lesezeichen setzt.

Vorteile von POST:

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

Nachteile von POST:

  • Eine Seite, die POST-Daten verwendet, kann kein Lesezeichen sein. (Falls Sie dies wünschen.)

Längere Version

Unmittelbar vom Hypertext-Übertragungsprotokoll -- HTTP/1.1 :

9.3 GET

Die GET-Methode bedeutet, dass alle Informationen (in Form einer Entität) abgerufen werden, die durch die Request-URI identifiziert werden. Bezieht sich die Request-URI auf einen datenproduzierenden Prozess, werden die produzierten Daten als Entität in der Antwort zurückgegeben und nicht der Quelltext des Prozesses, es sei denn, dieser Text ist die Ausgabe des Prozesses.

Die Semantik der GET-Methode ändert sich in ein "bedingtes GET", wenn die Anforderungsnachricht ein If-Modified-Since-, If-Unmodified-Since-, If-Match-, If-None-Match- oder If-Range-Headerfeld enthält. Eine bedingte GET-Methode verlangt, dass die Entität nur unter den durch das/die bedingte(n) Header-Feld(er) beschriebenen Umständen übertragen wird. Die bedingte GET-Methode soll die unnötige Netzauslastung verringern, indem sie es ermöglicht, zwischengespeicherte Entitäten zu aktualisieren, ohne dass mehrere Anfragen erforderlich sind oder Daten übertragen werden müssen, die sich bereits im Besitz des Clients befinden.

Die Semantik der GET-Methode ändert sich zu einem "partiellen GET", wenn die Anforderungsnachricht ein Range-Header-Feld enthält. Ein partieller GET verlangt, dass nur ein Teil der Entität übertragen wird, wie in Abschnitt 14.35 beschrieben. Die partielle GET-Methode soll die unnötige Netzauslastung verringern, indem sie es ermöglicht, teilweise abgerufene Entitäten zu vervollständigen, ohne Daten zu übertragen, die sich bereits im Besitz des Clients befinden.

Die Antwort auf eine GET-Anfrage ist nur dann zwischenspeicherfähig, wenn sie die in Abschnitt 13 beschriebenen Anforderungen für HTTP-Caching erfüllt.

Siehe Abschnitt 15.1.3 für Sicherheitsüberlegungen bei der Verwendung für Formulare.

9.5 POST

Die POST-Methode wird verwendet, um anzufordern, dass die Entität, die in der Anfrage enthalten ist, als eine neue untergeordnete Ressource die durch die Request-URI in der Request-Line identifiziert wird. POST ist konzipiert um eine einheitliche Methode zu ermöglichen, die die folgenden Funktionen abdeckt:

  • Beschriftung der vorhandenen Ressourcen;

  • Senden einer Nachricht an ein schwarzes Brett, eine Newsgroup oder eine Mailingliste, oder eine ähnliche Gruppe von Artikeln;

  • Bereitstellung eines Datenblocks, wie z. B. der Res Formulars, an einen Datenverarbeitungsprozess;

  • Erweitern einer Datenbank durch eine Anfügeoperation.

Die eigentliche Funktion, die die POST-Methode ausführt, wird Server bestimmt und ist in der Regel von der Request-URI abhängig. Die gepostete Entität ist dieser URI untergeordnet, so wie eine Datei einem Verzeichnis untergeordnet ist einem Verzeichnis, das sie enthält, untergeordnet ist, ein News-Artikel einer Newsgroup untergeordnet ist, in der er gepostet wird, oder ein Datensatz einer Datenbank.

Die mit der POST-Methode durchgeführte Aktion führt möglicherweise nicht zu einer Ressource, die durch einen URI identifiziert werden kann. In diesem Fall wird 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. das Ergebnis beschreibt.

32voto

Pascal MARTIN Punkte 384469

Der erste wichtige Punkt ist die Bedeutung zwischen GET und POST:

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

Danach gibt es noch ein paar Dinge, die zu beachten sind:

  • Mit GET können Ihre Nutzer die "Zurück"-Schaltfläche in ihrem Browser verwenden, und sie können Lesezeichen für Seiten setzen
  • Es gibt eine Grenze für die Größe der Parameter, die Sie als GET (2KB für einige Versionen von Internet Explorer, wenn ich mich nicht irre) Die Grenze ist für POST viel höher und hängt im Allgemeinen von der Konfiguration des Servers ab.

Wie auch immer, ich glaube nicht, dass wir ohne GET "leben" könnten: Denken Sie daran, wie viele URLs Sie jeden Tag mit Parametern im Query-String verwenden - ohne GET würden diese alle nicht funktionieren ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X