GET vs POST in Ajax

79

Was ist der Unterschied zwischen GET und POST für Ajax- Anfragen?

Ich sehe keinen Unterschied zwischen diesen beiden, außer dass bei Verwendung von GET die Parameter in einer URL gesendet werden, was für mich keinen wirklichen Unterschied macht, da alle Anfragen im Hintergrund gestellt werden und der Benutzer keine findet Unterschied.

edit: Wofür werden PUT- und DELETE- Methoden verwendet?

Jakub Arnold
quelle
8
Übrigens gibt es neben POST-Anforderungen auch PUT- und DELETE-Anforderungen. Sie sollten auch danach fragen.
S.Lott
1
Für zukünftige Leser: Hier ist eine verwandte Frage von Fooker vor einem Jahr .
Gideon
Dies ist besonders wichtig, wenn Sie vertrauliche Daten senden.
Biesior

Antworten:

137

GET dient zum Abrufen von Daten vom Server. POST (und weniger bekannte Freunde PUT und DELETE) dienen zum Ändern von Daten auf dem Server.

Eine GET-Anforderung sollte niemals dazu führen, dass Daten aus einer Anwendung entfernt werden. Wenn Sie einen Link haben, auf den Sie mit einem GET klicken können, um Daten zu entfernen, kann Google Spidering Ihrer Website auf alle Ihre "Löschen" -Links klicken.

Die kanonische Antwort finden Sie hier , in der die HTML 2.0-Spezifikation zitiert wird:

Wenn die Verarbeitung eines Formulars idempotent ist (dh keine dauerhafte beobachtbare Auswirkung auf den Zustand der Welt hat), sollte die Formularmethode GET sein. Viele Datenbanksuchen haben keine sichtbaren Nebenwirkungen und eignen sich ideal für Abfrageformulare.

Wenn der mit der Verarbeitung eines Formulars verbundene Dienst Nebenwirkungen hat (z. B. Änderung einer Datenbank oder Abonnement eines Dienstes), sollte die Methode POST sein.

In Ihrem AJAX-Aufruf müssen Sie die von Ihrem Server unterstützte Methode verwenden. Sie sollten Ihren Server immer so gestalten, dass Vorgänge, die Daten ändern, von POST / PUT / DELETE aufgerufen werden. Andere Kommentare enthalten Links zu REST, das C / R / U / D im Allgemeinen "POST oder PUT" (Erstellen) / GET (Lesen) / PUT (Aktualisieren) / LÖSCHEN (Löschen) zuordnet.

crb
quelle
9
+1: Grundlegende Definition von GET - Idempotenz. Alle Änderungen müssen mit POST, PUT und DELETE erfolgen.
S.Lott
Mein Server gibt 403 Fehler aus, wenn ich das Formular per Post sende, funktioniert get. Ich denke, das liegt an der Serverkonfiguration. Ich habe keinen Zugriff auf den Server. Wie komme ich darum herum?
Krrish Raj
Ich stimme @ S.Lott zu. Total nette und vollständige Definition der GET-Methode. Ich klatsche.
Victor Ribero Guasch
@KrrishRaj, es kann etwas mit Cross-Site-Posting zu tun haben. Werfen
Srikanth
Obwohl ich der Definition zustimme, ist es in der Praxis schwierig zu implementieren, da GET so nicht vertrauenswürdig ist. GET ist vollkommen in Ordnung für Dateien, die sich selten ändern, aber nicht so gut für tatsächliche Daten, die als POST zum Ändern von Daten verwendet werden, gefolgt von einem GET, das zuvor zwischengespeicherte Daten zurückgeben kann, und nicht nur von einem Browser, da ISPs GETs zwischenspeichern können und dies nicht tun müssen alle Caching-Header berücksichtigen. Für Dateien verwende ich GETs, aber beim Abfragen und Ändern von Daten verwende ich immer POSTs.
Rahly
27

Wenn Sie große Datenmengen oder vertrauliche Daten über HTTPS senden, sollten Sie POST verwenden. Wenn es nur ein einfacher Parameter ist, würde ich GET verwenden.

GET-Anforderungen sind auf die Datenmenge begrenzt, die gesendet werden kann. Ich habe die genaue Anzahl vergessen, aber dies kann zu Problemen führen, wenn Sie etwas Wesentliches senden.

Grundsätzlich besteht der Unterschied zwischen GET und POST darin, dass in einer GET-Anforderung die Parameter in der URL übergeben werden, wobei die Parameter wie in einem POST im Nachrichtentext enthalten sind.

Ryan Smith
quelle
2
Ja, wichtig, um darauf hinzuweisen, dass mit GET Größenbeschränkungen verbunden sind und dass diese je nach Client- und Serversoftware unterschiedlich sind
Allen Rice
19

Ob es AJAX ist oder nicht, ist irrelevant. Es geht um die Aktion, die Sie ergreifen. Ich würde empfehlen, den Prinzipien von REST zu folgen . Welche haben weitere Bestimmungen zum Aktualisieren, Löschen, etc ...

Brian
quelle
4

GET-Anforderungen lassen sich bei CSRF-Angriffen (Cross Site Request Forgery) leichter ausnutzen. Für gefälschte POST-Anforderungen muss Javascript auf der Benutzerseite aktiviert sein, während gefälschte GET-Anforderungen nur mit img-Skript-Tags möglich sind.

Sergey
quelle
3

Viele Webserver begrenzen die Länge der Daten, die als Teil der URL übergeben werden können, sodass die GET-Anforderung auf seltsame Weise unterbrochen werden kann, die schwer zu debuggen sind.

Außerdem protokolliert die meiste Serversoftware URLs in den Zugriffsprotokollen. Wenn Sie also vertrauliche Informationen (z. B. Kennwörter) in einer GET-Anforderung übergeben, werden diese höchstwahrscheinlich im Klartext auf die Festplatte geschrieben.

Aus REST-Sicht sollten GET-Anforderungen keine Nebenwirkungen haben - sie sollten keine Daten ändern. Wenn Sie also nur eine Ressource anhand der ID abrufen, ist dies sinnvoll. Wenn Sie jedoch Änderungen an einer Ressource vornehmen, sollten Sie PUT, POST oder UPDATE für das http-Verb verwenden.

Don Werve
quelle
3

Beide werden verwendet, um einige Daten zu senden und eine Antwort mit diesen Daten zu empfangen.

GET: Informationsspeicher auf dem Server abrufen. Dh. Suche, Tweet, Personeninformationen. Wenn Sie Informationen senden möchten, erhalten Sie eine Anfrage zum Senden einer Anfrage mit process.php? Name = subroto. Im Grunde werden Informationen über die URL gesendet. URL kann nicht mehr als 2083 Zeichen verarbeiten. Kannst du dich daran erinnern, dass es für einen Blog-Beitrag nicht möglich ist?

POST: Post mache das Gleiche wie get. Benutzerregistrierung, Benutzeranmeldung, Big Data senden, Blogpost. Wenn Sie sichere Informationen senden müssen, verwenden Sie Post oder Big Data, da diese nicht über die URL gesendet werden.

AJAX: $ .get () und $ .post () enthalten Funktionen, die Teilmengen von $ .ajax () sind. Es hat viel Konfiguration.

$ .get () -Methode, eine Art Abkürzung für $ .Ajax (). Wenn Sie $ .get () verwenden, übergeben Sie anstelle der Übergabe eines Objekts Argumente. Sie benötigen mindestens die ersten beiden Argumente, nämlich die URL der abzurufenden Datei (z. B. 'test.txt') und einen erfolgreichen Rückruf.

Zusammenfassung:

$.get( url [, data ] [, success ] [, dataType ] )
$.post( url [, data ] [, success ] [, dataType ] ) // for sending secure or Large information
$.ajax( url [, settings ] )  // More Configaration
Subroto Biswas
quelle
2

Erstens allgemeine Informationen. Verwenden GETSie diese POSTOption, wenn Sie nur Daten lesen. Verwenden Sie diese Option , wenn Sie Änderungen an Datenbanken, TXT-Dateien usw. vornehmen.

Das Problem ist jedoch, dass einige Browser die GETErgebnisse zwischenspeichern. Ich hatte Probleme mit AJAXAnfragen in IE7, aber schließlich fand ich heraus, dass der Browser die GETErgebnisse zwischenspeichert. Ich überlegte den Fluss und änderte meine Anfrage in POST.

Verwenden GETSie es also nicht, wenn Sie kein Caching wünschen.

(Natürlich können Sie das Caching in GET-Operationen deaktivieren. Aber ich habe es nicht bevorzugt.)

trante
quelle
1

Über mich bevorzuge ich POST. Ich behalte mir vor, zu den Ereignissen zu gelangen, von denen ich weiß, dass der gesendete Wert auf Daten beschränkt ist, für die ich die "Kontrolle" habe, um beispielsweise einen Artikel mit einer ID abzurufen. Beispiel: "getitem? Id = 123", "deleteImtem? Id = 123", ... Für die anderen Fälle, in denen ein Formular von einem Benutzer ausgefüllt werden kann, bevorzuge ich POST.

Wie Ryan Smith gesagt hat, ist es besser, POST zu verwenden, um eine große Datenmenge zu senden, und weniger Sorgen bei der Verwendung in anderen Sprachen / Sonderzeichen (im Allgemeinen sollten alle Javascript-Frameworks der Majors keine Probleme haben, damit umzugehen, aber Ich denke, es macht weniger Sorgen, POST zu verwenden.

Für die REST-Perspektive können Sie dies meiner Meinung nach mit einem neuen Projekt verwenden (um die Konsistenz mit dem gesamten Projekt zu gewährleisten).

Schließlich können möglicherweise einige Programme, die in einem Netzwerk verwendet werden (URL-Protokollierer (z. B. um zu sehen, ob die Mitarbeiter ihre Zeit auf nicht autorisierten Websites verloren haben, ...), Proxys, ...) oder andere Tools die Abfrage abfangen . Einige zeigen in den Berichten die Parameter, die Sie mit GET gesendet haben, und betrachten dies als eine andere Webseite. Aber in dieser Situation könnte es nicht Ihr Problem sein, dass es von einem Projekt zu einem anderen wechselt! ;)

user86830
quelle
0

Der Unterschied ist der gleiche zwischen GETund POSTob Sie Ajax, HTML forms oder verwenden curl. Hier sind die relevanten Definitionen:

Hank Gay
quelle
-2

Wenn Sie Argumente mit Zeichen weitergeben, die in der URL durcheinander geraten können (z. B. Leerzeichen), verwenden Sie POST. Andernfalls können Sie GET verwenden.

Wenn Sie nur ein paar winzige Argumente weitergeben, würden Sie im Allgemeinen GET verwenden. Für die Weitergabe von vom Benutzer eingereichten Informationen wie Blogeinträgen, Text usw. empfiehlt es sich jedoch, POST zu verwenden.

Es gibt auch bestimmte Frameworks, die vollständig auf segmentbasierten URLs basieren (z. B. site.com/products/133und nicht, site.com/products.php?id=333und diese Frameworks deaktivieren die GET-Variablen aus Sicherheitsgründen. In solchen Fällen würden Sie POST die ganze Zeit verwenden.

Klicken Sie auf Upvote
quelle