web-dev-qa-db-fra.com

Les clés de chaîne de requête sont-elles sensibles à la casse?

Supposons que j'ai une URL comme ceci:

http://www.example.com?key=123&KEY=198

Alors quel sera le résultat de

request.querystring("key")

and 

request.querystring("KEY")

Je suis un peu confus.

58

Le RFC pour les URI dit:

6.2.2.1. Normalisation de cas

Lorsqu'un URI utilise des composants de la syntaxe générique, les règles d'équivalence de syntaxe de composant s'appliquent toujours. à savoir que le schéma et l'hôte sont insensibles à la casse et doivent donc être normalisés en minuscules. Par exemple, l'URI est équivalent à http://www.example.com/ .

Les autres composants syntaxiques génériques sont supposés être sensibles à la casse, sauf spécification contraire définie par le schéma (voir au paragraphe 6.2.3).

Notez que schéma ("http" ici), hôte (nom du serveur) ne respecte pas la casse, mais doit néanmoins être en minuscule. Le reste est sensible à la casse, sauf si vous utilisez un schéma différent qui dit explicitement qu'il devrait être insensible.

Donc, clé et clé sont différentes dans tous les URI basés sur http en fonction de la spécification.

59
gbjbaanb

La réponse de @ gbjbaanb est incorrecte: les RFC spécifient uniquement le jeu de caractères autorisé pour la chaîne de requête. Comme les composants chemin et fragment de l'URI, le composant requête URI n'a de sens que niquement pour l'autorité fournissant la ressource.

Il appartient entièrement à cette autorité de déterminer si ces éléments sont sensibles à la casse ou non.

Dans le cas de C # et IIS, le magasin de sauvegarde de la chaîne de requête analysée dans l'objet HttpRequest est un System.Collections.Specialized.NameValueCollection qui se révèle insensible à la casse (par défaut).

Etant donné que cette classe offre aux autres constructeurs la possibilité de fournir différents comparateurs d'égalité, rien n'empêche absolument une implémentation de la rendre sensible à la casse.

De plus, puisque la page elle-même (et le javascript côté client) ont accès à l'URI brut, ils sont libres de faire ce qu'ils veulent avec.

Si la chaîne de requête est créée à la suite d'une soumission de formulaire HTML, les clés (noms) proviennent de la valeur de l'attribut name des contrôles de formulaire, que les spécifications HTML considèrent comme sensible à la casse. Mais autant que je sache, personne ne le fait vraiment.

Donc, à la fin de la journée, vous devez savoir ce que le gestionnaire de demandes attend dans votre chaîne de requête. Cela pourrait (ou non) être sensible à la casse.

47
Nicholas Carey

Selon hurl.it , key sera égal à 123 et KEY, 198. Ils seront accessibles sous la forme de deux chaînes de requête différentes .

8
Rémi Delhaye