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

249

Was ist der Unterschied bei der Verwendung GEToder POSTMethode? Welches ist sicherer? Was sind (Nachteile) von jedem von ihnen?

( ähnliche Frage )

Adriana
quelle
2
Get hat keinen Body. In der Praxis bedeutet dies, dass Sie sich auf Namen -> Wertepaare als Datenstruktur beschränken, da für eine komplexere Struktur kein Codierungsformat für Abfragezeichenfolgen vorhanden ist. Wenn Sie komplexere Datenstrukturen in Ihren Anforderungen (z. B. ein Array, ein Objekt usw.) verarbeiten müssen, müssen Sie POST und möglicherweise erweiterte Formate (json / xml) verwenden. Kurz gesagt: Verwenden Sie GET nur, wenn Sie es wirklich müssen (dh die URL / Ressource muss erkennbar sein).
Themihai
1
Mögliches Duplikat von Wann verwenden Sie POST und wann verwenden Sie GET?
Imran Ali Khan

Antworten:

263

Es geht nicht um Sicherheit. Das HTTP-Protokoll definiert Anforderungen vom Typ GET als idempotent , während POSTs Nebenwirkungen haben können. Im Klartext bedeutet dies, dass GET zum Anzeigen von etwas verwendet wird, ohne es zu ändern, während POST zum Ändern von etwas verwendet wird. Beispielsweise sollte eine Suchseite GET verwenden, während ein Formular, das Ihr Kennwort ändert, POST verwenden sollte.

Beachten Sie auch, dass PHP die Konzepte ein wenig verwirrt. Eine POST-Anforderung wird von der Abfragezeichenfolge und über den Anforderungshauptteil eingegeben. Eine GET-Anforderung wird nur von der Abfragezeichenfolge eingegeben. Eine POST-Anforderung ist also eine Obermenge einer GET-Anforderung. Sie verwenden können , $_GETin einer POST - Anfrage, und es kann sogar Sinn Parameter zu haben , mit dem gleichen Namen machen in $_POSTund $_GETdas bedeutet verschiedene Dinge.

Angenommen, Sie haben ein Formular zum Bearbeiten eines Artikels. Die Artikel-ID befindet sich möglicherweise in der Abfragezeichenfolge (und ist daher über verfügbar $_GET['id']). Angenommen, Sie möchten die Artikel-ID ändern. Die neue ID kann dann im Anforderungshauptteil ( $_POST['id']) vorhanden sein. OK, vielleicht ist das nicht das beste Beispiel, aber ich hoffe, es zeigt den Unterschied zwischen den beiden.

troelskn
quelle
13
Der Unterschied zwischen GET und POSTs hat definitiv einen Sicherheitsaspekt. Eine böswillige Site kann beispielsweise eine beliebige GET-Anforderung in ein Image-Tag einfügen, wodurch Benutzer ein GET für einen anderen Server ausführen. Wenn dieses GET wie ein anderer Server / Deletemyaccount ist, passieren schlimme Dinge.
Frank Schwieterman
2
Was ich damit meinte war, dass der Inhalt von $ _POST nicht auf magische Weise vor böswilligen Benutzern verborgen ist. Es gibt offensichtlich Sicherheitsaspekte bei der Programmierung.
Troelskn
1
Dieser Beitrag beantwortet die Frage nicht vollständig, da er die Auswirkungen auf die Sicherheit nicht erwähnt. Der obere Teil ist gut, solange der Rechtschreibfehler "pain English" in "plain English" geändert wird. Der untere Teil ist zu schwer zu folgen. Im Großen und Ganzen viel besser als mein Beitrag. :-)
Akrikos
1
"Eine POST-Anforderung wird von der Abfragezeichenfolge und über den Anforderungshauptteil eingegeben." IMHO ist das falsch. Um eine der Eingaben zu verwenden, müssen Sie $ _REQUEST verwenden. $ _POST erhält keine URL-Einträge.
Gunnar Bernstein
1
@Frank Schwieterman Ich weiß, dass dieser Beitrag alt ist, aber mein Konto zu löschen ist nicht idempotent und sollte nicht get verwenden.
frostymarvelous
77

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

Die im vorherigen Beispiel verwendete GET-Methode hängt Name / Wert-Paare an die URL an. Leider ist die Länge einer URL begrenzt, sodass diese Methode nur funktioniert, wenn nur wenige Parameter vorhanden sind. Die URL kann abgeschnitten werden, wenn das Formular eine große Anzahl von Parametern verwendet oder wenn die Parameter große Datenmengen enthalten. Außerdem werden die an die URL übergebenen Parameter im Adressfeld des Browsers angezeigt. Dies ist nicht der beste Ort, um ein Kennwort anzuzeigen.

Die Alternative zur GET-Methode ist die POST-Methode. Diese Methode packt die Name / Wert-Paare in den Hauptteil der HTTP-Anforderung, wodurch eine sauberere URL entsteht und die Formularausgabe keinen Größenbeschränkungen unterliegt. Es ist auch sicherer.

IAdapter
quelle
1
Wie ist es "sicherer"?
Julian Reschke
4
weil es schwieriger zu ändern ist? Sie können GET in der Adressleiste ändern, aber mit POST ist das nicht so einfach.
IAdapter
8
Der Server kann dem Client nicht vertrauen. Das Entwerfen Ihrer Anwendung anhand falscher Annahmen ist alles andere als sicher.
Troelskn
openid ist auch nicht sicher, weil es kaputt gehen kann?
IAdapter
1
Ich glaube, dies ist die klarste Erklärung - Unterschied in Bezug auf die Platzierung der gesendeten Daten. Danke dir.
Greenoldman
37

Die beste Antwort war die erste.

Du benutzt:

  • GET, wenn Sie Daten abrufen möchten (GET DATA).
  • POST, wenn Sie Daten senden möchten (POST DATA).
Alex
quelle
2
Welches Anforderungs- / Antwortdienstmuster wird verwendet und Sie möchten beides tun? ;) Ich würde es vorziehen, POST in den meisten Fällen zu verwenden, wenn ich eine Antwort zurück haben muss.
Dmitry Pavlov
8
Im Allgemeinen ist das wahr. GETist perfekt in der Lage, auch Daten zu "senden", daher keine sehr genaue Antwort.
Patrick Hofman
23

Die Verwendung hat zwei häufige Auswirkungen auf die "Sicherheit" GET. Da Daten in der URL-Zeichenfolge angezeigt werden, kann möglicherweise jemand, der über die Schulter in die Adressleiste / URL schaut, etwas anzeigen, mit dem er nicht vertraut sein sollte, z. B. ein Sitzungscookie, das möglicherweise zur Entführung Ihrer Sitzung verwendet werden kann. Denken Sie daran, dass jeder Kamerahandys hat.

Die andere Sicherheitsimplikation von GEThat damit zu tun, dass GETVariablen als Teil der anfordernden URL im Zugriffsprotokoll der meisten Webserver protokolliert werden. Abhängig von der Situation, dem regulatorischen Klima und der allgemeinen Sensibilität der Daten kann dies möglicherweise zu Bedenken führen.

Einige Clients / Firewalls / IDS-Systeme können bei GETAnfragen, die eine übermäßige Datenmenge enthalten , die Stirn runzeln und daher unzuverlässige Ergebnisse liefern.

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

POSTerfordert einen Header mit Inhaltslänge, der die Komplexität einer anwendungsspezifischen Client-Implementierung erhöhen kann, da die Größe der übermittelten Daten im Voraus bekannt sein muss, um zu verhindern, dass eine Client-Anforderung in einem ausschließlich inkrementellen Einzeldurchlaufmodus gebildet wird. Möglicherweise ein kleines Problem für diejenigen, die sich für einen Missbrauch HTTPals RPC-Transport (Remote Procedure Call) entscheiden.

Andere haben bereits gute Arbeit geleistet, um die semantischen Unterschiede und den "Wann" -Teil dieser Frage zu behandeln.

Einstein
quelle
17

Ich verwende GET, wenn ich Informationen von einer URL abrufe, und POST, wenn ich Informationen an eine URL sende .

Mark Biek
quelle
1
Sie können aber auch GET zum Senden verwenden. Der Unterschied ist das Format (in der URL (GET) oder in der Anfrage (POST)).
Eric
Wenn der Endpunkt eine Datei akzeptiert und eine Zeile aus der Datei zurückgibt (keine Datenerstellung oder -änderung oder Datenbank), sollte der Endpunkt dann GET oder POST sein?
Variable
17

Sie sollten POST verwenden, wenn viele Daten oder vertrauliche Informationen vorhanden sind (für wirklich vertrauliche Inhalte ist auch eine sichere Verbindung erforderlich).

Verwenden Sie GET, wenn Sie möchten, dass Personen Ihre Seite mit einem Lesezeichen versehen können, da alle Daten im Lesezeichen enthalten sind.

Seien Sie nur vorsichtig, wenn Personen mit der GET-Methode auf REFRESH klicken, da die Daten jedes Mal erneut gesendet werden, ohne den Benutzer zu warnen (POST warnt den Benutzer manchmal vor dem erneuten Senden von Daten).

Gewähren
quelle
Wenn der Endpunkt eine Datei akzeptiert und eine Zeile aus der Datei zurückgibt (keine Datenerstellung oder -änderung oder Datenbank), sollte der Endpunkt dann GET oder POST sein?
Variable
@variable POST. In diesem Fall hauptsächlich, weil POST für das Hochladen von Dateien ausgelegt ist und Standard-GET nicht. Sie müssten die Datei jedes Mal senden, wenn die Seite geladen wird. Daher ist es sinnvoll, anstelle der GET + -Datei nur den Standard-POST zu verwenden, was die Erwartung von GET brechen würde, dass eine URL jedes Mal mehr oder weniger dieselben Ergebnisse liefert.
Grant
14

In diesem W3C-Dokument wird die Verwendung von HTTP GET und POST erläutert.

Ich denke, es ist eine maßgebliche Quelle.

Die Zusammenfassung lautet (Abschnitt 1.3 des Dokuments):

  • Verwenden Sie GET, wenn die Interaktion eher einer Frage ähnelt (dh es handelt sich um eine sichere Operation wie eine Abfrage, eine Leseoperation oder eine Suche).
  • 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
    • Der Benutzer ist für die Ergebnisse der Interaktion verantwortlich.
chus
quelle
9
Ich denke, das lässt sich wie folgt zusammenfassen: GET, wenn der Status des Servers nicht geändert wird, POST, wenn dies der Fall ist.
Yamcha
10

Get- und Post-Methoden haben nichts mit der von Ihnen verwendeten Servertechnologie zu tun. Sie funktionieren in PHP, Asp.net oder Ruby genauso. GET und POST sind Teil des HTTP-Protokolls. Wie bereits erwähnt, ist POST sicherer. POST-Formulare werden auch nicht vom Browser zwischengespeichert. POST wird auch verwendet, um große Datenmengen zu übertragen.

Sarsnake
quelle
8

Der Grund für die Verwendung von POST bei Änderungen an Daten:

  • Ein Webbeschleuniger wie Google Web Accelerator klickt auf alle (GET) Links auf einer Seite und speichert sie zwischen. Dies ist sehr schlecht, wenn die Links Änderungen an Dingen vornehmen.
  • Ein Browser speichert GET-Anforderungen zwischen. Wenn der Benutzer auf den Link klickt, sendet er möglicherweise keine Anforderung an den Server, um die Änderung auszuführen.
  • Um Ihre Site / Anwendung vor CSRF zu schützen, müssen Sie POST verwenden. Um Ihre App vollständig zu sichern, müssen Sie dann auch eine eindeutige Kennung auf dem Server generieren und diese in der Anfrage mitsenden.

Fügen Sie außerdem keine vertraulichen Informationen in die Abfragezeichenfolge ein (nur Option mit GET), da diese in der Adressleiste, in den Lesezeichen und in den Serverprotokollen angezeigt werden.

Hoffentlich erklärt dies, warum Leute sagen, dass POST "sicher" ist. Wenn Sie vertrauliche Daten übertragen, müssen Sie SSL verwenden.

Sarel Botha
quelle
8

GETund POSTsind HTTP - Methoden , die können ähnliche Ziele erreichen

GETist im Grunde genommen nur zum Abrufen (Abrufen) von Daten gedacht. A GETsollte keinen Textkörper haben. Abgesehen von Cookies ist der einzige Ort, an dem Informationen weitergegeben werden können, die URL. URLs sind in ihrer Länge begrenzt und GETweniger sicher als POSTdie gesendeten Daten die URL

Niemals verwenden, GETwenn Passwörter, Kreditkarten oder andere vertrauliche Informationen gesendet werden! Daten sind für alle in der URL sichtbar. Kann zwischengespeicherte Daten sein. GETist harmlos, wenn wir die Schaltfläche neu laden oder zurückrufen, sie wird mit einem Buch markiert, Parameter bleiben im Browserverlauf, nur ASCII-Zeichen sind zulässig.

POSTkann alles beinhalten, wie das Speichern oder Aktualisieren von Daten, das Bestellen eines Produkts oder das Senden von E-Mails. POSTMethode hat einen Körper.

POSTDie Methode ist für die Weitergabe vertraulicher und vertraulicher Informationen an den Server gesichert. Sie wird in den Abfrageparametern in der URL nicht angezeigt und die Parameter werden nicht im Browserverlauf gespeichert. Es gibt keine Einschränkungen hinsichtlich der Datenlänge. Beim Neuladen sollte der Browser den Benutzer darauf hinweisen, dass die Daten erneut gesendet werden sollen. POSTMethode kann nicht mit einem Lesezeichen versehen werden

user3540599
quelle
3
  1. Die GET-Methode wird zum Senden der weniger sensiblen Daten verwendet, während die POST-Methode zum Senden der sensiblen Daten verwendet wird.
  2. Mit der POST-Methode können Sie im Vergleich zur GET-Methode große Datenmengen senden.
  3. Von der GET-Methode gesendete Daten werden in der Kopfzeile des Browsers angezeigt, während von der POST-Methode gesendete Daten nicht sichtbar sind.
Honig
quelle
0

Verwenden Sie die GET-Methode, wenn Sie die Ressourcen von der URL abrufen möchten. Sie können immer die letzte Seite sehen, wenn Sie auf die Schaltfläche "Zurück" Ihres Browsers klicken, und sie kann mit einem Lesezeichen versehen werden, sodass sie nicht so sicher ist wie die POST-Methode.

Verwenden Sie die POST-Methode, wenn Sie etwas an die URL senden möchten. Wenn Sie beispielsweise ein Google-Konto erstellen möchten und möglicherweise alle detaillierten Informationen eingeben müssen, klicken Sie nach erfolgreicher Übermittlung auf die Schaltfläche "Senden" (die POST-Methode wird hier aufgerufen) und versuchen, die Schaltfläche "Zurück" Ihres Browsers zu drücken Sie erhalten eine Fehlermeldung oder ein neues leeres Formular anstelle der letzten Seite mit dem ausgefüllten Formular.

RobotCharlie
quelle
-10

Die GETMethode:

  • Es wird nur zum Senden eines Datums mit 256 Zeichen verwendet

  • Bei Verwendung dieser Methode werden die Informationen im Browser angezeigt

  • Dies ist die Standardmethode, die von Formularen verwendet wird

  • Es ist nicht so gesichert.


Die POSTMethode:

  • Es wird zum Senden unbegrenzter Daten verwendet.

  • Bei dieser Methode können die Informationen im Browser nicht angezeigt werden

  • Sie können die POSTMethode explizit erwähnen

  • Es ist sicherer als die GETMethode

  • Es bietet erweiterte Funktionen

Sidharam Anache
quelle
"Es wird nur zum Senden eines Datums mit 256 Zeichen verwendet" - nicht wahr. "Bei Verwendung dieser Methode werden die Informationen im Browser angezeigt" - Post-Daten sind auch in Browsern sichtbar, sie sind jedoch nicht ganz so offensichtlich. "Es bietet erweiterte Funktionen" - wie z.
Quentin
Dies ist keine besonders nützliche Antwort. Falsche Informationen wie "Es ist nicht so sicher" und "Bietet erweiterte Funktionen" und andere von Quentin erwähnte Dinge.
Andrew Barber