webentwicklung-frage-antwort-db.com.de

Warum ist die GET-Methode schneller als POST in HTTP?

Ich bin ein Neuling in der Webprogrammierung und bin nur neugierig auf Get and Post-Methoden zum Senden von Daten von einer Seite zu einer anderen Seite.

Es wird gesagt, dass Get-Methode schneller ist als Post, aber ich weiß nicht, warum es ein Grund ist, warum ich feststellen konnte, dass Get nur 255 Zeichen damit aufnehmen kann? Gibt es noch andere Gründe, bitte jemand erklären Sie mir?

39
Embedd_Khurja

Es geht nicht viel um Geschwindigkeit. Es gibt viele Fälle, in denen POST eher zutreffend ist. Suchmaschinen indizieren beispielsweise GET-URLs, und Browser können sie mit einem Lesezeichen versehen und in der Historie anzeigen. Wenn Sie beispielsweise Aktionen wie das Ändern einer Datenbank auf der Grundlage einer GET-Anforderung durchführen, kann dies schädlich sein, da einige Bots auch die URL durchqueren können. 

Der andere Fall kann ein Sicherheitsrisiko sein. Wenn Sie Anmeldeinformationen mithilfe von GET bereitstellen, werden diese im Browserverlauf und in den Serverprotokolldateien aufgeführt.

42
Mehrdad Afshari

Eine weitere Sache bei http post ist, dass es 2 Aufrufe geben kann, wenn der http-Header Expect: 100-Continue verwendet wird. Der erste Browser sendet die HTTP-Post-Header und die Serverantworten mit "HTTP 100 Continue". Wenn der Browser dies empfängt, wird der tatsächliche Körper gesendet.

http://omaralzabir.com/atlas_2__http_post_is_slower_and_it_s_default_in_atlas/

Ich denke, das ist die Antwort, nach der der Autor gesucht hat.

41
Kyle Nunery

Es gibt mehrere falsche Vorstellungen über GET und POST in HTTP. Es gibt einen Hauptunterschied, GET muss idempotent sein, während POST nicht sein muss. Dies bedeutet, dass GETs keine Nebenwirkungen verursachen, d. H. Ich kann ein GET so oft an eine Webanwendung senden, wie ich möchte (denke, Strg + R oder F5 viele Male drücken) und die Anforderungen werden "sicher" sein.

Ich kann das nicht mit POST tun, ein POST kann Daten auf dem Server ändern. Wenn ich zum Beispiel einen Artikel im Internet bestelle, sollte der Artikel mit einem POST hinzugefügt werden, da der Status auf dem Server geändert wird. Die Anzahl der hinzugefügten Artikel hat sich um 1 erhöht. Wenn ich dies getan habe mit einem POST und klicken Sie auf "Aktualisieren" im Browser. Der Browser warnt mich. Wenn ich dies mit einem GET mache, sendet der Browser die Anfrage einfach.

Auf dem Server ist GET vs POST reine Konvention, dh es liegt an mir als Entwickler, sicherzustellen, dass ich POST auf dem Server auf nicht schreibe Anruf. Es gibt verschiedene Möglichkeiten, dies zu tun, aber das ist eine andere Frage.

Um die Frage tatsächlich zu beantworten, wenn ich GET oder POST verwende, um dieselbe Aufgabe auszuführen, besteht kein Leistungsunterschied.

Sie können den RFC ( http://www.w3.org/Protocols/rfc2616/rfc2616.html ) lesen, um weitere Informationen zu erhalten. 

28
Kevin Jones

Mit Blick auf das http-Protokoll sollte POST oder GET gleich einfach und schnell zu analysieren sein. Ich würde behaupten, dass es keinen Leistungsunterschied gibt. 

Schauen Sie sich die rohen HTTP-Header an

http GET

GET /index.html?userid=joe&password=guessme HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0

http POST

POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27
Content-Type: application/x-www-form-urlencoded

userid=joe&password=guessme

Aus meiner Sicht sollte die Leistung beim Vergleich von GET und POST nicht berücksichtigt werden.

9
Robert

Sie sollten sich GET als "einen Ort zum Gehen" vorstellen und POST als "etwas tun". Beispielsweise sollte ein Suchformular mithilfe von GET gesendet werden, da die Suchergebnisseite ein "Ort" ist und der Benutzer das Lesezeichen zu einem späteren Zeitpunkt mit einem Lesezeichen versehen oder aus seinem Verlauf abrufen möchte. Wenn Sie das Formular mit POST absenden, kann der Benutzer die Seite nur neu erstellen, indem Sie das Formular erneut senden. Wenn Sie dagegen eine Aktion ausführen möchten, z. B. das Klicken auf eine Schaltfläche "Löschen", möchten Sie diese nicht mit GET absenden, da die Aktion immer dann wiederholt wird, wenn der Benutzer zur URL zurückkehrt.

7
Tim Booker

Nur meine paar Cent von 2016.

Ich erstelle ein einfaches Nachrichtensystem. Zuerst habe ich POST verwendet, um neue Benachrichtigungen zu erhalten. In jQuery hatte ich:

$.post('/a/alerts', 'stamp=' + STAMP, function(result)
{
});

Und in PHP habe ich $ _POST ['stamp'] verwendet. Selbst von localhost erhielt ich 90-100 ms für jede Anfrage wie diese. Ich habe einfach geändert:

$.get('/a/alerts?stamp=' + STAMP, function(result)
{
});

und in PHP wurde zu $ ​​_GET ['stamp'] gewechselt. Also etwas weniger als 1 Minute Änderungen. Jetzt dauert jede Anfrage 30-40 ms .

So kann GET doppelt so schnell sein wie POST . Natürlich nicht immer, aber für kleine Datenmengen bekomme ich immer die gleichen Ergebnisse.

6
Tom

GETist etwas schneller weil die Werte im Header gesendet werden, im Gegensatz zumPOSTwerden die Werte im Request body gesendet, im Format, das der Inhaltstyp angibt.

Normalerweise ist der Inhaltstyp application/x-www-form-urlencoded. Daher verwendet der Anforderungshauptteil das gleiche Format wie die Abfragezeichenfolge:

parameter = value & auch = other Wenn Sie einen Dateiupload im Formular verwenden, verwenden Sie stattdessen die Multipart-/Formulardatencodierung, die ein anderes Format hat. Es ist komplizierter.

2
Waqleh

Ich stimme mit anderen Antworten überein, aber es wurde nicht erwähnt, dass GET-Anforderungen zwischengespeichert werden können, während POST-Anforderungen niemals zwischengespeichert werden. Ich denke, das ist der Hauptgrund dafür, dass einige GET-Anfragen schneller ausgeführt werden. (Aus grobem Grund bedeutet dies, dass manchmal tatsächlich keine Anfrage gesendet wird. Daher ist nicht wirklich die GET-Anfrage schneller, sondern der Cache Ihres Browsers.) )

HTTP-Methoden: GET vs. POST: http://www.w3schools.com/tags/ref_httpmethods.asp

1
AXO

POST wird Ihre Header weiter vergrößern, nur größer machen, aber der Unterschied sollte wirklich vernachlässigbar sein, daher sehe ich nicht, warum dies ein Problem sein sollte.

Denken Sie jedoch daran, dass der richtige Weg zum Sprechen von HTTP die Verwendung von GET nur für Aktionen und POST für Daten ist. Sie müssen es nicht, aber Sie möchten auch keinen Fall haben, in dem Google-Bots beispielsweise Daten einfügen, löschen oder manipulieren können, die nur für einen Menschen gedacht waren, nur weil sie den gefundenen Links folgen .

0
Hans