Angenommen, ich habe eine URL wie diese:
http://www.example.com?key=123&KEY=198
Was wird dann daraus resultieren?
request.querystring("key")
and
request.querystring("KEY")
Ich bin etwas verwirrt.
Angenommen, ich habe eine URL wie diese:
http://www.example.com?key=123&KEY=198
Was wird dann daraus resultieren?
request.querystring("key")
and
request.querystring("KEY")
Ich bin etwas verwirrt.
Antworten:
Der RFC für URIs lautet:
6.2.2.1. Fallnormalisierung
Wenn ein URI Komponenten der generischen Syntax verwendet, gelten immer die Äquivalenzregeln für die Komponentensyntax. Das heißt, das Schema und der Host unterscheiden nicht zwischen Groß- und Kleinschreibung und sollten daher auf Kleinbuchstaben normiert werden. Der URI entspricht beispielsweise http://www.example.com/ .
Bei den anderen generischen Syntaxkomponenten wird davon ausgegangen, dass zwischen Groß- und Kleinschreibung unterschieden wird, sofern das Schema nichts anderes bestimmt (siehe Abschnitt 6.2.3).
Beachten Sie, dass Schema ("http" hier), Host (Servername) die Groß- und Kleinschreibung nicht berücksichtigen, aber trotzdem in Kleinbuchstaben geschrieben werden sollten. Der Rest unterscheidet zwischen Groß- und Kleinschreibung, es sei denn, Sie verwenden ein anderes Schema, das ausdrücklich angibt, dass es nicht berücksichtigt werden soll.
Key und KEY sind also in allen http-basierten URIs je nach Spezifikation unterschiedlich.
Bearbeiten: @Nicholas geht teilweise falsch davon aus, dass die Behörde definiert, was sie akzeptiert. Dies gilt für benutzerdefinierte Schemata und Berechtigungen, die ihre eigenen URIs definieren. Http ist jedoch eine genau definierte Spezifikation, der jeder entspricht (oder Sie könnten http-Abfragen haben, die dies zulassen habe zum Beispiel den Pipe-Charakter als Begrenzer. Stell dir das Chaos dort vor!)
Die RFC-Spezifikation für HTTP lautet:
Das Schema und der Host unterscheiden nicht zwischen Groß- und Kleinschreibung und werden normalerweise in Kleinbuchstaben angegeben. Alle anderen Komponenten werden in Groß- und Kleinschreibung verglichen. Andere Zeichen als die im "reservierten" Satz entsprechen ihren prozentual codierten Oktetten: Die normale Form besteht darin, sie nicht zu codieren (siehe Abschnitte 2.1 und 2.2 von [RFC3986]).
Der Abfrageteil des URI, wie er in der Spezifikation für das HTTP-Schema definiert ist, unterscheidet also zwischen Groß- und Kleinschreibung. Wenn Microsoft einen Parser für Abfragezeichenfolgen hat, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, entspricht dieser nicht der Spezifikation. Nicht, dass ich denke, dass dieses Maß an Seltsamkeit wirklich wichtig ist.
Die Antwort von @ gbjbaanb ist falsch: Die RFCs geben nur den zulässigen Zeichensatz für die Abfragezeichenfolge an. Wie die Pfad- und Fragmentkomponenten des URI hat die Abfrage- URI-Komponente nur für die Autorität, die die Ressource bereitstellt, eine Bedeutung .
Es liegt ganz bei dieser Behörde, ob bei diesem Zeug zwischen Groß- und Kleinschreibung unterschieden wird oder nicht.
Im Fall von C # und IIS, der Zusatzspeicher für den geparste Abfrage - String in dem HttpRequest
Objekt ist eine , System.Collections.Specialized.NameValueCollection
die Groß- und Kleinschreibung wird passiert (Standard).
Da diese Klasse anderen Konstruktoren bietet, dass unterschiedliche Gleichheitsvergleiche bereitgestellt werden können, hindert absolut nichts eine Implementierung daran, zwischen Groß- und Kleinschreibung zu unterscheiden.
Da die Seite selbst (und das clientseitige Javascript) Zugriff auf den unformatierten URI haben, können sie damit tun, was sie wollen.
Wenn die Abfragezeichenfolge als Ergebnis einer HTML-Formularübermittlung erstellt wird, stammen die Schlüssel (Namen) aus dem Wert des Formularsteuerelementattributs name
, das laut HTML-Angaben zwischen Groß- und Kleinschreibung unterscheidet. Aber so nah ich weiß, macht das wirklich niemand.
Letztendlich müssen Sie also wissen, was der Anforderungshandler in Ihrer Abfragezeichenfolge erwartet. Es kann zwischen Groß- und Kleinschreibung unterscheiden (oder auch nicht).
Nach hurl.it , key
wird gleich sein 123
und KEY
, 198
. Sie sind als zwei verschiedene Querringe zugänglich .
Kurz gesagt, sie werden in vielen Programmiersprachen als gleich angesehen.
Verschiedene Teile der URL unterscheiden sich in Bezug auf die Groß- und Kleinschreibung: