Was ist der Unterschied zwischen URL-Parametern und Abfragezeichenfolgen?

90

Ich sehe keinen großen Unterschied zwischen den Parametern und den Abfragezeichenfolgen in der URL. Was ist der Unterschied und wann sollte eines über das andere angewendet werden?

Konst
quelle
1
Haben Sie einen Kontext, denn soweit ich weiß, werden die beiden im Allgemeinen für denselben verwendet - aber Ihr Fall könnte kontextspezifisch sein.
Allan S. Hansen
Ich habe keinen bestimmten Kontext, ist eine allgemeine Frage. In welchem ​​Fall sollte ich den einen Weg anstelle des anderen verwenden. Es muss unterschiedliche Verwendungen dieser beiden geben.
Konst
Persönlich - Ich verwende meistens den Wortparameter, wenn ich sie in einem Variablen- oder Methodenaufrufkontext verwende, und eine Abfragezeichenfolge, wenn ich im URL-Kontext über sie spreche. (zB: Die Abfragezeichenfolge wird in Parameter für die Methode aufgeteilt). Aber es ist nur eine Sprache, so dass Kontext und Situationen unterschiedlich sind und ich bezweifle, dass irgendjemand Sie dafür jagen würde, eine von beiden zu verwenden, wenn Sie Lust dazu haben :).
Allan S. Hansen

Antworten:

84

Die Abfragekomponente wird durch die erste ?in einem URI angezeigt . "Abfragezeichenfolge" kann ein Synonym sein (dieser Begriff wird im URI-Standard nicht verwendet).

Einige Beispiele für HTTP-URIs mit Abfragekomponenten:

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b

( Liste der zulässigen Zeichen in der Abfragekomponente )

Das "Format" der Abfragekomponente liegt bei den URI-Autoren. Eine übliche Konvention ( aber nichts weiter als eine Konvention, was den URI-Standard betrifft ¹) ist die Verwendung der Abfragekomponente für Schlüssel-Wert-Paare, auch bekannt als. Parameter , wie im letzten Beispiel oben : bar1=a&bar2=b.

Solche Parameter könnten auch in den anderen URI-Komponenten auftreten, dh im Pfad² und im Fragment. In Bezug auf den URI-Standard liegt es an Ihnen, welche Komponente und welches Format verwendet werden soll.

Beispiel-URI mit Parametern im Pfad, in der Abfrage und im Fragment:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ Der URI-Standard sagt über die Abfragekomponente :

[…] Abfragekomponenten werden häufig verwendet, um identifizierende Informationen in Form von "Schlüssel = Wert" -Paaren zu übertragen. […]

² Der URI-Standard sagt über die Pfadkomponente :

[…] Die reservierten Zeichen Semikolon (";") und Gleich ("=") werden häufig verwendet, um Parameter und Parameterwerte abzugrenzen, die für dieses Segment gelten. Das reservierte Komma (",") wird häufig für ähnliche Zwecke verwendet.

unor
quelle
1
Parameter und Abfrage sind unterschiedlich. Siehe Abschnitte 3.3 und 3.4 in tools.ietf.org/html/rfc2396.html
Cowlinator
@cowlinator: (RFC 2396 ist veraltet, aber der aktuelle Standard, RFC 3986, sagt etwas Ähnliches über Parameter in der Pfadkomponente aus ). Ich habe nicht gesagt, dass sie gleich sind, oder? URI-Autoren können Parameter in der Abfragekomponente angeben (wie in meiner Antwort beschrieben), und sie können auch Parameter in der Pfadkomponente angeben (wie in Ihrer Referenz beschrieben) - in beiden Fällen handelt es sich nur um eine Konvention, die vom Standard nicht definiert wird. - Würden Sie eine Änderung meiner Antwort vorschlagen? Denken Sie, dass OP Parameter im Pfad bedeutete?
Unor
30

Parameter sind Schlüssel-Wert-Paare, die im URL-Pfad angezeigt werden können und mit einem Semikolon ( ;) beginnen.

Die Abfragezeichenfolge wird nach dem Pfad angezeigt (falls vorhanden) und beginnt mit einem Fragezeichen ( ?).

Sowohl Parameter als auch Abfragezeichenfolge enthalten Schlüssel-Wert-Paare.

In einer GETAnfrage werden Parameter in der URL selbst angezeigt:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

In einer POSTAnfrage können Parameter in der URL selbst, aber auch im Datenstrom (als Inhalt bezeichnet) angezeigt werden.

Die Abfragezeichenfolge ist immer Teil der URL.

Parameter können form-databei Verwendung der POST-Methode im Datenstrom vergraben werden, sodass sie möglicherweise nicht in der URL angezeigt werden. Ja, eine POSTAnforderung kann Parameter als Formulardaten und in der URL definieren. Dies ist nicht inkonsistent, da Parameter mehrere Werte haben können.

Ich habe bisher keine Erklärung für dieses Verhalten gefunden. Ich denke, es kann manchmal nützlich sein, Parameter aus einer POSTAnfrage "einzublenden" oder sogar den Code, der eine GETAnfrage verarbeitet, einige Teile mit dem Code teilen zu lassen, der a verarbeitet POST. Dies kann natürlich nur mit Servercode funktionieren, der Parameter in einer URL unterstützt.

Bis Sie bessere Einblicke erhalten, empfehle ich Ihnen, Parameter nur im form-dataDatenstrom von POSTAnforderungen zu verwenden.

Quellen:

Was jeder Entwickler über URLs wissen sollte

RFC 3986

Laurent Caillette
quelle