Frage

Einige meiner Ajax-Anwendungen in der Vergangenheit haben GET-Anfrage, aber jetzt fange ich statt POST-Anforderung zu verwenden. POST-Anfragen scheinen etwas sicherer und auf jeden Fall mehr url freundlich / hübsch zu sein. So ich frage mich, ob es ein Grund gibt, warum ich GET-Anfrage überhaupt verwenden sollte.

War es hilfreich?

Lösung

Ist alle wichtige Änderung nach der Anfrage (Protokollierung und dergleichen ungeachtet):

ich in der Regel die Frage, wie so eingerichtet?. Ist dies der Fall, sollte es eine POST-Anfrage, wenn dies nicht der Fall, sollte es eine GET-Anforderung sein.

Ich bin froh, dass Sie POST-Anfragen „etwas“ sicherer nennen, denn das ist so ziemlich das, was sie sind; es ist trivial zu fälschen eine POST-Anfrage von einem Benutzer auf einer Seite. So dass es eine POST-Anforderung jedoch verhindert Webbeschleuniger oder Nachladen von erneut Auslösen der Aktion aus Versehen.

Wie AJAX, gibt es eine weitere Überlegung: Wenn Sie JSON zurückkehren mit Rückruf Unterstützung, sehr vorsichtig sein, keine sensiblen Daten zu setzen, die Sie nicht wollen, andere Websites der Lage sein, in dort zu sehen. Wikipedia hatte eine Schwachstelle in dieser Richtung, wo der Benutzer anti-CSRF-Token über ihre JSON API offenbart wurde.

Andere Tipps

sollten Sie verwenden, wenn Sie eine Anforderung tun, die keine Nebenwirkungen haben, z.B. Holen nur ein paar Informationen. Diese Anforderung kann:

  • Seien Sie ohne Probleme wiederholt - wenn der Browser einen Fehler erkennt kann es leise wiederholen
  • Hat das Ergebnis durch den Browser im Cache gespeichert
  • Lassen Sie sich von einem Proxy-Cache gespeichert

Diese Dinge sind alle gut. Alles, was nur das Abrufen von Daten (insbesondere öffentliche Daten) sollten wirklich ein GET sein. Der Server sollte sinnvoll Last-Modified senden: und läuft ab:. Header-Caching zu ermöglichen, falls erforderlich

Alle guten Punkte, aber auf die Frage in der Antwort, GET-Anfragen mehr nützlich sind, in bestimmten Szenarien über POST-Anfragen:

  1. Sie können vorgemerkt werden
  2. Sie können zwischengespeichert werden
  3. Sie sind schneller
  4. Sie haben bekannte Folgen (vorausgesetzt, sie ändern Daten nicht), so besuchen sie mehr Mal ist das kein Problem.

Im Interesse der Nachwelt, die Aktualisierung dieser Kommentar mit den Blog-Notizen re: Punkt # 3 hier, alle Ehre Omar AL Zabir (der Autor des in Bezug genommenen Blog-Post ):

  

"Atlas standardmäßig macht HTTP POST für alle AJAX-Aufrufe. Http POST   teurer als HTTP-GET. Es überträgt mehr Bytes über den Draht,   somit wertvolle Netzwerk Zeit nehmen, und es macht auch ASP.NET tun Extra   Verarbeitung auf der Serverseite. Also, sollten Sie Http Get so viel verwenden, wie   möglich. Allerdings ist Http Get nicht zulassen, dass Sie Objekte passieren, wie   Parameter. Sie können nur numerische, String- und Datum übergeben. Wenn du machst   ein Http Get Aufruf baut Atlas eine codierte URL und macht einen Treffer zu, dass   url. Also, Sie müssen nicht zu viel Inhalt übergeben, die die URL macht werden   größer als 2048 Zeichen. Soweit ich weiß, ist das, was der max   Länge jeder URL.

     

Eine weitere schlechte Sache über http Post ist, ist es eigentlich 2 Anrufe. Zuerst   Browser sendet den HTTP-POST-Header und Server antwortet mit „HTTP 100   Fortsetzen". Wenn Browser dies empfängt, sendet er den eigentlichen Körper. "

Dies könnte Ihnen helfen, zu entscheiden, wo GET zu verwenden und wo POST zu verwenden:

URIs, Adressierbarkeit und die Verwendung von HTTP GET und POST .

Es gibt einen weiteren Unterschied von niemandem erwähnt.

GET-Anfragen werden in dem URL-String übergeben und sind daher mit einer Längenbegrenzung in der Regel abhängig von dem Browser.

POST-Anfragen können viel, viel größer sein - in der Tat wirklich nicht auf diese beschränkt. Also, wenn Sie benötigen Daten von einem Webserver an, und Sie sind in vielen Parameterinformationen vorbei, dann könnte eine POST-Anforderung die einzige Option sein.

So, wie bisher wirklich ein GET-Anfrage erwähnt ist für Daten (keine Nebenwirkungen), während eine POST-Anforderung im Allgemeinen zum Übertragen von Daten an den Server zurück anfordert (mit Nebenwirkungen) zu speichernden verwendet wird. z.B. Verwenden Sie POST, um eine Datei zu. GET eine Datei abzurufen.

Es gab eine Zeit, als IE Ich glaube, eine sehr kurze GET URL-Zeichenfolge hatte. Einige Anwendungen wie Lotus Notes verwenden, eine große Anzahl von zufälligen Zeichen zu Dokument-IDs darstellen. Ich hatte den Unmut ein anderes Produkt zu verwenden, die zufälligen Zeichenfolge erzeugt, so dass die Seiten-URL jedes Mal einzigartig war. Die zufällige Zeichenfolge war riesig ... und es hat immer nicht mit IE6 aus dem Speicher zu arbeiten.

POST-Anfragen sind ebenso unsicher wie GETs. Der wesentliche Unterschied besteht darin, dass POST verwendet wird, um den Zustand der Server-Anwendung zu ändern, während GET nur fordert Daten aus.

Der Unterschied ist wichtig, wenn Sie sauber zu verwenden, „ruhig“ URLs, wo die URL selbst die Ressource angibt, und die verschiedenen Methoden auslösen verschiedene Aktionen auf der Server-Seite.

Vielleicht am wichtigsten ist, GET ist Buch-beschriftbar / sichtbar in url Geschichte und durchsuchbar mit Google.

POST ist wichtig, wenn Sie dies nicht tun wollen das Ereignis ein Lesezeichen oder in der Lage sein, als eine URL zu eingegeben - andernfalls Sie (oder Google Ihre URLS kriechen) versehentlich Dinge zu tun, könnte am Ende wie Löschen von Benutzern aus dem System, zum Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top