Was ist gültig und was ist nicht in einer URI-Abfrage?

Hintergrund (Frage weiter unten)

Ich habe schon Googeln dieses hin und her-das Lesen von RFCs und SO Fragen versuchen zu knacken, aber ich glaube trotzdem nicht, bekam jack.

Also ich denke, dass wir nur Stimmen für die "beste" Antwort, und das ist es, oder?

Im Grunde läuft es auf dies.

3.4. Query-Komponente

Die query-Komponente ist eine Reihe von Informationen interpretiert werden, die von der Ressource.

query = *uric

Innerhalb einer query-Komponente, die Zeichen ";", "/", "?", ":", "@", "&", "=", "+", ",", und "$" sind vorbehalten.

Das erste, was, das verwirrt mich ist, dass *die Harnsäure ist wie folgt definiert

uric = reserved | unreserved | escaped

reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

Dies ist jedoch etwas geklärt durch Absätze wie

"Reservierten" syntax-Klasse oben bezieht sich auf die zulässigen Zeichen innerhalb einer URI, die aber möglicherweise nicht erlaubt, innerhalb einer bestimmten Komponente der generischen URI-syntax; Sie werden verwendet als Trennzeichen der Komponenten, beschrieben in Abschnitt 3.

Zeichen in der "reserviert" eingestellt werden, sind nicht reserviert, die in allen Kontexten. Der Satz von Zeichen, die eigentlich reserviert sind, innerhalb einer gegebenen URI-Komponente definiert ist, die von dieser Komponente. Im Allgemeinen wird ein Charakter ist reserviert, wenn die Semantik der URI ändert, wenn die Zeichen ersetzt mit seiner Escape-US-ASCII-Codierung.

Dieser Letzte Auszug fühlt sich etwas nach hinten, aber es eindeutig, dass die reservierten Zeichen gesetzt, abhängig vom Kontext. Noch 3.4 besagt, dass alle reservierten Zeichen sind reserviert innerhalb einer query-Komponente, aber die einzigen Dinge, die zu einer Veränderung der Semantik hier ist Flucht das Fragezeichen (?) als URIs definieren Sie nicht das Konzept der query-string.

In diesem Punkt habe ich aufgegeben auf die RFCs ganz aber gefunden RFC 1738 besonders interessant.

Einen HTTP-URL hat die form:

http://<host>:<port>/<path>?<searchpart>

Innerhalb der <Pfad> und <searchpart> Komponenten, "/", ";", "?" reserviert sind. Die " /" - Zeichen kann verwendet werden innerhalb von HTTP zu benennen, die eine hierarchische Struktur.

Interpretiere ich dies zumindest für HTTP-URLs, RFC 1738 ersetzt RFC 2396. Da die URI-query hat keine Vorstellung von einem query-string auch die interpretation der gebuchten, nicht wirklich lassen Sie mir erlauben, zu definieren, Abfrage-strings, als ich gewohnt bin zu tun.

Frage

Dieser alle Schritte, wenn ich es wollte zu übergeben eine Liste von zahlen zusammen mit der Anfrage einer anderen Ressource. Ich habe nicht viel von ihm denken, und nur an ihn als ein Komma getrennte Werte. Zu meiner überraschung obwohl das Komma entgangen war. Die Abfrage page.html?q=1,2,3 - codiert-stellte sich in page.html?q=1%2C2%2C3 es funktioniert, aber es ist hässlich und nicht erwarten, dass es. Das ist, wenn ich ging durch RFCs.

Meine erste Frage ist einfach, ist die Codierung Komma wirklich notwendig?

Meine Antwort, nach RFC 2396: ja, gemäß RFC 1738: keine

Später fand ich ähnliche Beiträge in Bezug auf die Weitergabe von Listen zwischen den Anforderungen. Wo die csv-Ansatz wurde balanciert, als schlecht. Dies zeigte sich stattdessen (noch nicht gesehen vorher).

page.html?q=1;q=2;q=3

Meine zweite Frage, ist dies ein Gültiger URL?

Meine Antwort, nach RFC 2396: keine, gemäß RFC 1738: keine (; ist reserviert)

Ich habe keine Probleme mit übergabe von csv-solange es zahlen, aber ja, Sie tun, laufen Sie in die Gefahr, dass das Kodieren und Dekodieren von Werten hin und her, wenn das Komma plötzlich ist erforderlich für etwas anderes. Trotzdem habe ich versucht, das semi-colon-query-string-Ding mit ASP.NET und das Ergebnis war nicht das, was ich erwartet hatte.

Default.aspx?a=1;a=2&b=1&a=3

Request.QueryString["a"] = "1;a=2,3"
Request.QueryString["b"] = "1"

Ich nicht, um zu sehen, wie diese stark unterscheidet sich von einer csv-Ansatz, wie wenn ich Frage "a" bekomme ich einen string mit Kommas. ASP.NET sicherlich keine Referenz-Implementierung, aber es hat mich nicht enttäuscht noch.

Aber am wichtigsten ist-meine Dritte Frage -- wo ist die Spezifikation für diese? und was würden Sie tun oder auch nicht tun?

InformationsquelleAutor der Frage John Leidegren | 2010-03-02

Schreibe einen Kommentar