Unterscheiden Groß- und Kleinschreibung zwischen Groß- und Kleinschreibung?

73

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.

ch.smrutiranjan parida
quelle

Antworten:

71

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.

gbjbaanb
quelle
53

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 HttpRequestObjekt ist eine , System.Collections.Specialized.NameValueCollectiondie 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).

Nicholas Carey
quelle
2
Ich habe mir alten C # -Code angesehen und versucht zu verstehen, warum die Schlüssel ohne Berücksichtigung der Groß- und Kleinschreibung behandelt wurden, und Ihre Antwort hat dies gut erklärt. +1
Marcel Lamothe
9

Nach hurl.it , keywird gleich sein 123und KEY, 198. Sie sind als zwei verschiedene Querringe zugänglich .

Rémi Delhaye
quelle
1
Was ist, wenn die Sprache in klassisches ASP geändert wird?
ch.smrutiranjan parida
4
@ ch.smrutiranjanparida, die Sprachauswahl ist unabhängig davon, wie ein Abfrageparameter behandelt werden soll. Ob Sie COBOL, Perl, Erlang, Classic ASP, R, Java oder Lisp verwenden, spielt keine Rolle. Natürlich können Bibliotheken, die Querystrings interpretieren, Fehler aufweisen, und Programmierer können Querystrings sorgfältig in Kleinbuchstaben schreiben (und sollten dies auch nicht tun ), aber aus URI-Sicht sind sie unterschiedlich, wenn der Fall anders ist . Weitere Informationen finden Sie im RFC in der akzeptierten Antwort .
Abel
@Abel hat es verstanden. Danke für die Eingabe. :)
ch.smrutiranjan parida
0

Kurz gesagt, sie werden in vielen Programmiersprachen als gleich angesehen.

Verschiedene Teile der URL unterscheiden sich in Bezug auf die Groß- und Kleinschreibung:

  • Protokoll (http) - Groß- und Kleinschreibung wird nicht berücksichtigt
  • Hostname (example.com) - Groß- und Kleinschreibung wird nicht berücksichtigt
  • Pfad (/folder/document.html) - Groß- und Kleinschreibung beachten
  • Abfragezeichenfolge Schlüssel (? Fuzz = bar ODER? FUZZ = bar) - Groß- und Kleinschreibung wird nicht berücksichtigt
  • Abfragezeichenfolge Wert (? Fuzz = bar & Buzz = BAR) - Groß- und Kleinschreibung beachten
samtax01
quelle