283 Stimmen

Wann sollte ich die Methode GET oder POST verwenden? Was ist der Unterschied zwischen ihnen?

Was ist der Unterschied bei der Verwendung von GET o POST Methode? Welche Methode ist sicherer? Was sind die (Un-)Vorteile der einzelnen Methoden?

( ähnliche Frage )

296voto

troelskn Punkte 110542

Das ist keine Frage der Sicherheit. Das HTTP-Protokoll definiert Anfragen vom Typ GET als idempotent während POSTs Nebenwirkungen haben können. Im Klartext heißt das, dass GET dazu dient, etwas anzusehen, ohne es zu verändern, während POST dazu dient, etwas zu verändern. Zum Beispiel sollte eine Suchseite GET verwenden, während ein Formular zum Ändern Ihres Passworts POST verwenden sollte.

Beachten Sie auch, dass PHP die Begriffe ein wenig durcheinander bringt. Eine POST-Anfrage erhält Eingaben aus dem Query-String und durch den Request-Body. Eine GET-Anfrage erhält nur Eingaben aus dem Query-String. Eine POST-Anfrage ist also eine Obermenge einer GET-Anfrage; Sie können verwenden $_GET in einer POST-Anfrage, und es kann sogar sinnvoll sein, Parameter mit demselben Namen in $_POST y $_GET die unterschiedliche Dinge bedeuten.

Nehmen wir zum Beispiel an, Sie haben ein Formular zur Bearbeitung eines Artikels. Die Artikel-ID kann im Query-String enthalten sein (und ist somit über $_GET['id'] ), aber nehmen wir an, dass Sie die Artikel-ID ändern möchten. Die neue ID kann dann im Anfragekörper enthalten sein ( $_POST['id'] ). OK, das ist vielleicht nicht das beste Beispiel, aber ich hoffe, es verdeutlicht den Unterschied zwischen den beiden.

87voto

IAdapter Punkte 58848

Wenn der Benutzer Informationen in ein Formular eingibt und auf "Absenden" klickt, gibt es zwei Möglichkeiten, wie die Informationen vom Browser an den Server gesendet werden können: in der URL oder im Textkörper der HTTP-Anfrage.

Die GET-Methode, die im vorherigen Beispiel verwendet wurde, fügt Name/Wert-Paare an die URL an. Leider ist die Länge einer URL begrenzt, so dass diese Methode nur funktioniert, wenn es nur wenige Parameter gibt. Die URL könnte abgeschnitten werden, wenn das Formular eine große Anzahl von Parametern verwendet oder wenn die Parameter große Datenmengen enthalten. Außerdem sind die an die URL übergebenen Parameter in der Adresszeile des Browsers sichtbar, was nicht der beste Ort für die Anzeige eines Kennworts ist.

Die Alternative zur GET-Methode ist die POST-Methode. Bei dieser Methode werden die Name/Wert-Paare im Textkörper der HTTP-Anforderung verpackt, was eine sauberere URL ergibt und keine Größenbeschränkungen für die Formularausgabe mit sich bringt. Außerdem ist sie sicherer.

38voto

alex Punkte 479

Die beste Antwort war die erste.

Sie verwenden:

  • GET wenn Sie Daten abrufen wollen (GET DATA).
  • POST wenn Sie Daten senden wollen (POST DATA).

29voto

Einstein Punkte 4360

Es gibt zwei übliche "Sicherheits"-Implikationen bei der Verwendung von GET . Da die Daten in der URL-Zeichenkette erscheinen, ist es möglich, dass jemand, der Ihnen bei der Adressleiste/URL über die Schulter schaut, etwas sehen kann, das er nicht sehen sollte, wie z. B. ein Sitzungs-Cookie, das möglicherweise dazu verwendet werden könnte, Ihre Sitzung zu entführen. Bitte beachten Sie alle hat Kameratelefone.

Die andere sicherheitsrelevante Auswirkung von GET hat zu tun mit GET Variablen, die in den meisten Webserver-Zugriffsprotokollen als Teil der anfordernden URL protokolliert werden. Je nach Situation, rechtlichem Umfeld und allgemeiner Sensibilität der Daten kann dies Anlass zu Bedenken geben.

Einige Clients/Firewalls/IDS-Systeme mögen es nicht, wenn GET Anfragen, die eine übermäßige Menge an Daten enthalten und daher unzuverlässige Ergebnisse liefern können.

POST unterstützt erweiterte Funktionen wie die Unterstützung von mehrteiligen Binäreingaben, die für das Hochladen von Dateien auf Webserver verwendet werden.

POST erfordert einen Content-Length-Header, der die Komplexität einer anwendungsspezifischen Client-Implementierung erhöhen kann, da die Größe der übermittelten Daten im Voraus bekannt sein muss, was verhindert, dass eine Client-Anfrage ausschließlich in einem inkrementellen Single-Pass-Modus erstellt wird. Vielleicht ein geringfügiges Problem für diejenigen, die sich für den Missbrauch HTTP indem es als RPC-Transport (Remote Procedure Call) verwendet wird.

Andere haben sich bereits ausführlich mit den semantischen Unterschieden und dem "Wann" in dieser Frage befasst.

20voto

Grant Punkte 11649

Sie sollten POST verwenden, wenn es sich um eine große Datenmenge oder um sensible Informationen handelt (wirklich sensible Daten benötigen ebenfalls eine sichere Verbindung).

Verwenden Sie GET, wenn Sie möchten, dass die Besucher Ihre Seite mit einem Lesezeichen versehen können, da alle Daten in das Lesezeichen aufgenommen werden.

Seien Sie nur vorsichtig, wenn Sie bei der GET-Methode auf REFRESH drücken, da die Daten jedes Mal erneut gesendet werden, ohne dass der Benutzer gewarnt wird (POST warnt den Benutzer manchmal vor dem erneuten Senden von Daten).

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