2008-11-05 17 views
6

Jetzt weiß ich einen Unterschied zwischen Parametern in einer URL und einem POST-Parameter: einige Browser können sich schlecht benehmen, wenn die URL zu lang ist, also ist es keine gute Idee, Hunderte von Parametern in einer URL stopfen, auch wenn Ihre App kann auf eine GET-Anfrage antworten.Gibt es einen Unterschied zwischen Parametern in einer URL und <form method = "get">?

Für die Diskussion nehmen wir die folgende Webanwendung: ein Benutzer kann eine Reihe von (möglicherweise Hunderte von) X, Y-Koordinaten eingeben. Der Server zeichnet sie in einem Diagramm auf, das als Bild zurückgegeben wird.

Dies ist eindeutig ein Beispiel für eine idempotent operation, daher wird gemäß der HTTP spec empfohlen, als eine GET-Operation implementiert werden. Sie können jedoch keine URL mit allen Parametern erstellen, da dies zu lange dauert. Kann ein < Formular Methode = "Get" > behandeln so viele Parameter?

Ich habe auch gehört, dass < form method = "get" > ist vollständig äquivalent zum Platzieren von Parametern in einer URL? Nun, gilt das für einige Browser oder für das gesamte HTTP-Protokoll? Gibt es eine maximale Länge für eine Anfrage?

Antwort

7

Die HTTP-Spezifikation legt keine Einschränkungen fest, aber die Browser und Server tun dies. Einzelheiten finden Sie unter here.

Der Browser wird eine lange URL erstellen, wenn die Methode auf GET für ein Formular festgelegt ist, so dass die obigen Einschränkungen gelten.

2

Was Ihr Browser tatsächlich tut, ist eine wirklich lange URL aus den Formulareingaben zu erstellen. Daher gibt es keinen Unterschied zwischen einer URL und dem Formular Method = "GET". Beides führt dazu, dass dieselbe URL geladen wird.

0

Ich habe auch gehört, dass < form method = "get" > ist zu platzieren Parameter in einer URL vollständig gleichwertig?

das wahr ist, ist hier die entsprechenden RFC section

Gibt es eine maximale Länge auf eine Anfrage?

Die spec sagt "Das HTTP-Protokoll legt keine a priori Grenze für die Länge eines URI."

Allerdings hat Internet Explorer 6 ein Limit von 2.083 Zeichen. Andere Browser erlauben mehr Zeichen, aber wenn Sie diese Route gehen, müssen Sie im Grunde für ie6

+0

Die HTTP-Spezifikation definiert nicht

Elemente; Sie müssen stattdessen die HTML-Spezifikation betrachten. –

1

formatieren form method = get wird alle Formular-Eingabe in die URL.

Es ist wahr, dass Browser eine maximale Länge für die URL haben. Es ändert sich von Browsern zu Browsern und sicherlich von Browser-Version zu Browser-Version.

Wenn Sie können, würde ich Ihnen empfehlen, POST für Ihr Formular zu verwenden.

HTH

1

GET und url? Name = Wert & ... sind das Gleiche, wie der Browser nur eine GET-Form in eine URL konvertiert, bevor die Anforderung zu senden.

Die maximale Länge der URL wird auf Browser- und Serverebene festgelegt. Für einen bestimmten Browser/Server ist es also der kleinere der beiden.

This post hat eine gute Liste der aktuellen max Längen für URLS

0

Das ist keine Antwort auf Ihre Frage zu erhalten und Post, aber in einer Situation wie Sie beschreiben es oft einfacher ist, die komplexer zu speichern Daten auf dem Server und verknüpfen Sie sie mit einer Sitzungs-ID oder einem Benutzerkonto, anstatt sie jedes Mal in die URL einzugeben. Dann können Sie nur den Bezeichner für diese Sitzung in einem Cookie oder als URL-Parameter verwenden, um das Bild abzurufen.

Das kann Ihnen auch helfen, die angeforderten Bilder zwischenzuspeichern, so dass Sie nicht jedes Mal, wenn ein Benutzer ein bestimmtes Diagramm erneut betrachten möchte, die Arbeit der Neugenerierung durchlaufen müssen.

1

Nein, ein Server kann keinen Unterschied zwischen dem Einfügen von Parametern in eine URL und dem Verwenden einer FORM mit einer GET-Methode feststellen. Wenn also eine gegebene URL mit Parametern zu lang ist, hilft die Verwendung einer FORM mit einer GET-Methode nicht.

POST oder GET sollte hauptsächlich für ihre Semantik gewählt werden. GET ist für "sichere" Aktionen. Das heißt, Benutzer sollten nicht für eine Operation verantwortlich gemacht werden, die von einer GET-Anforderung ausgeführt wird. Die POST-Methode wird für Vorgänge verwendet, für die der Benutzer verantwortlich gemacht werden soll.

Es ist sehr frustrierend, zum Beispiel, wenn eine Suchfunktion POST verwendet. Ein Benutzer erwartet nicht, dass eine einfache Abfrage einen wichtigen Systemstatus ändert — Sie erwarten, dass die Suche eine "sichere" Operation ist.

Auf der anderen Seite gibt es viele Sicherheitslücken, da unsichere Operationen sowohl über GET-Anfragen als auch über POST erreichbar sind. Dies trägt zu Sicherheitslücken wie XSRF bei, bei denen ein Angreifer lediglich eine bösartige "src" -URL in ein IMG-Tag auf einer legitimen Site importieren muss.

Für Ihren Anwendungsfall kann Ajax tatsächlich eine geeignete Lösung sein. Sie können für jeden ausgewählten Punkt eine GET-Anforderung erstellen und diese in einer Sitzung auf dem Server speichern. Wenn der Benutzer die Eingabe von Punkten beendet hat, ruft eine abschließende GET-Anforderung das fertige Produkt ab.

3

Die HTTP specification erfordert nicht explizit, Parameter einer GET-Anforderung in den URI zu platzieren. Es wäre legal, einen Nachrichtentext in einer GET-Anfrage zu senden, wie dies bei POST-Formularen der Fall ist.

Allerdings implementieren Browser GET-Formulare auf diese Weise aus einem sehr guten Grund: Caching. GET-Anforderungen werden voraussichtlich ohne Nebenwirkungen auf dem Server verarbeitet. So können Antworten auf GET-Anforderungen zwischengespeichert werden. Diese Leistungsverbesserungsoption geht sofort verloren, wenn Sie die Verwendung von Nachrichtentexten bei GET-Anforderungen starten würden.

Wenn Sie eine Diagramm-API entwerfen möchten, können Sie sich die Datei Google ansehen. Sie bieten bereits eine sehr gute für die Öffentlichkeit. Auch wenn es nur darum geht, so viele Informationen wie möglich in URI-Parameter zu packen, ist es einen Blick wert.

alt text   alt text   alt text   alt text

+0

+1, ich mag das Caching-Argument. –