L'URL doit-elle être sensible à la casse?


284

J'ai remarqué ça

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

et

http://stackoverflow.com/questions/ask

les deux fonctionnent bien - en fait, le précédent est converti en minuscules.

Je pense que cela a du sens pour l'utilisateur.

Si je regarde Google, cette URL fonctionne bien:

http://www.google.com/intl/en/about/corporate/index.html  

mais celui-ci avec "ABOUT" ne fonctionne pas:

http://www.google.com/intl/en/ABOUT/corporate/index.html   

L'URL doit-elle être sensible à la casse?


13
À mon humble avis, l'URL ne doit jamais être sensible à la casse, cela ne fait que rendre la vie plus difficile aux personnes qui l'utiliseront.
Muhammad Umer

16
La question "les URL DEVRAIENT-elles être sensibles à la casse?" est une mauvaise question car elle invoque l'opinion. Au lieu de cela, une meilleure question serait, "POURQUOI les URL sont-elles (ou pourquoi ne le sont-elles pas) sensibles à la casse?", Ou "Pourquoi certaines URL sont-elles sensibles à la casse alors que d'autres ne le sont pas?"
chharvey

Mais pour une réponse possible, consultez nouvelle URL standard de WHATWG , qui a été adopté par Node.js .
chharvey

à mon avis, non, ils ne devraient pas être
Andrew

si le navigateur n'honore pas le cas, l'adresse ipfs sera cassée, mais elle ne l'est pas
Beeno Tung

Réponses:


281

Selon " HTML et URL " de W3, ils devraient:

Il peut y avoir des URL ou des parties d'URL, où la casse n'a pas d'importance, mais leur identification peut ne pas être facile. Les utilisateurs doivent toujours considérer que les URL sont sensibles à la casse.


96
Je suppose que "être libéral dans ce que vous acceptez et conservateur dans ce que vous envoyez" (IETF parle) serait ma ligne directrice.
jldupont

9
La directive W3 est raisonnable. Il indique simplement qu'il ne faut pas faire d'hypothèse sur la façon dont le serveur gère l'URL que vous soumettez. Il appartient au serveur de gérer l'URL de la demande. La plupart des serveurs Web sont Unix / Linux et cela signifie que la plupart des serveurs Web sont sensibles à la casse.
2013

37
W3 indique que les UTILISATEURS devraient supposer que les serveurs sont sensibles à la casse, mais ne donne pas de recommandation aux SERVEURS.
trysis le

3
Pour la résilience, les programmes interprétant les URL doivent traiter les lettres majuscules comme équivalentes aux minuscules dans les noms de schéma (par exemple, autoriser "HTTP" ainsi que "http"). Source
realPK

3
@PK_ Notez que cela ne s'applique qu'à la partie schéma de l'URL. La RFC1738 n'indique pas si d'autres parties de l'URL doivent être interprétées comme sensibles à la casse ou non.
dthrasher

126

Tous les « insensibles » sont mis en gras pour plus de lisibilité.

Les noms de domaine ne respectent pas la casse selon la RFC 4343 . Le reste de l'URL est envoyé au serveur via la méthode GET. Cela peut être sensible à la casse ou non.

Prenez cette page par exemple, stackoverflow.com reçoit la chaîne GET / questions / 7996919 / devrait être sensible à la casse , envoyant un document HTML à votre navigateur. Stackoverflow.com n'est pas sensible à la casse car il produit le même résultat pour / QUEStions / 7996919 / Should-url-be-case-sensitive .

D'autre part, Wikipedia est sensible à la casse, sauf le premier caractère du titre. Les URL https://en.wikipedia.org/wiki/Case_sensitivity et https://en.wikipedia.org/wiki/case_sensitivity conduisent au même article, mais https://en.wikipedia.org/wiki/CASE_SENSITIVITY renvoie 404.


7
Wikipedia est en fait très indulgent pour la sensibilité à la casse dans les cas où les utilisateurs peuvent penser qu'un mot devrait être un cas ou un autre, mais c'est plus à cause de l'OCD ... désolé, la nature prévenante de ses éditeurs. Cependant, ses URL sont techniquement sensibles à la casse.
trysis le

14
En effet, la partie sémantique et lisible de l'URL d'une question dans stackoverflow ne l'identifie pas, elle est identifiée par 7996919. La partie sémantique de l'URL est juste là à des fins de référencement.
user3367701

4
En fait, /programming/7996919/should-BLABLA-be-or-NOT-to-be fonctionne également . En effet, le serveur de stackoverflow.com utilise uniquement l'ID de la question pour l'identifier et renvoyer l'URL et la page HTML correctes.
Bozzy

72

Dépend de l'hébergeur. Les sites hébergés sur Windows ont tendance à ne pas respecter la casse car le système de fichiers sous-jacent est insensible à la casse. Les sites hébergés sur des systèmes de type Unix ont tendance à être sensibles à la casse, car leurs systèmes de fichiers sous-jacents sont généralement sensibles à la casse. La partie du nom d'hôte de l'URL est toujours insensible à la casse, c'est le reste du chemin qui varie.


1
Oui, car celui-ci l'a douloureusement découvert sur les requêtes http vers des fichiers sur un serveur ftp Unix.
Laurie Stearn du

1
Il serait plus précis de dire «dépend du serveur» au sens général - car le service de fichiers n'est pas le seul moyen de répondre aux requêtes HTTP.
Valentin Waeselynck

31

La partie du nom de domaine d'une URL n'est pas sensible à la casse car DNS ignore la casse: http://en.example.org/et les HTTP://EN.EXAMPLE.ORG/deux ouvrent la même page.

Le chemin est utilisé pour spécifier et peut-être trouver la ressource demandée. Il est sensible à la casse, bien qu'il puisse être traité comme insensible à la casse par certains serveurs, en particulier ceux basés sur Microsoft Windows.

Si le serveur est sensible à la casse et http://en.example.org/wiki/URLest correct, alors http://en.example.org/WIKI/URLou http://en.example.org/wiki/urlaffichera une page d'erreur HTTP 404, à moins que ces URL pointent vers des ressources valides elles-mêmes.


3
Cette réponse a la seule formulation correcte "elle est sensible à la casse, bien qu'elle puisse être traitée comme insensible à la casse". Seule réponse valable.
Daniel W.15

@DanFromGermany, le chemin est sensible à la casse peut être déduit vaguement d' ici "Les URL en général sont sensibles à la casse (à l'exception des noms de machine). Il peut y avoir des URL ou des parties d'URL, où la casse n'a pas d'importance, mais identifiant cela peut ne pas être facile. " Mais, il est ambigu d'en déduire. Comme mentionné dans un commentaire ci-dessus, la RFC1738 ne discute pas si les parties de l'URL autres que le schéma doivent être interprétées comme sensibles à la casse ou non. Avez-vous un lien qui précise quelles parties de l'url sont sensibles à la casse?
grenat

2
@garnet De RFC3986 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 des composants s'appliquent toujours; à savoir que le schéma et l'hôte ne sont pas sensibles à la casse et doivent donc être normalisés en minuscules. Par exemple, l'URI HTTP://www.EXAMPLE.com/est équivalent à http://www.example.com/. Les autres composants de syntaxe générique sont supposés être sensibles à la casse, sauf indication contraire du schéma. "
Daniel W.

2
@garnet Et à partir de la RFC HTTP : " Lors de la comparaison de deux URI pour décider s'ils correspondent ou non, un client DEVRAIT utiliser une comparaison octet par octet sensible à la casse des URI entiers [...] " (à l'exception du schéma et héberger lui-même).
Daniel W.

15

Je ne suis pas un fan de l'ancien article, mais parce que c'était l'une des premières réponses à ce problème particulier, j'ai ressenti le besoin de clarifier quelque chose.

Comme @Bhavin Shah répond que la partie domaine de l'url est insensible à la casse, donc

http://google.com 

et

http://GOOGLE.COM 

et

http://GoOgLe.CoM 

sont tous les mêmes, mais tout ce qui se trouve après la partie du nom de domaine est considéré comme sensible à la casse.

alors...

http://GOOGLE.COM/ABOUT

et

http://GOOGLE.COM/about

sont différents.

Remarque: je parle "techniquement" et non "littéralement" dans de nombreux cas, la plupart du temps, les serveurs sont configurés pour gérer ces éléments de la même manière, mais il est possible de les configurer afin qu'ils ne soient PAS traités de la même manière.

Différents serveurs gèrent cela différemment et dans certains cas, ils doivent être sensibles à la casse. Dans de nombreux cas, les valeurs de chaîne de requête sont codées (telles que les identifiants de session ou les données encodées en Base64 qui sont transmises en tant que valeur de chaîne de requête).

Donc, pour répondre à la question, "si" les serveurs doivent être sensibles à la casse dans la capture de ces données, la réponse est "oui, très certainement".

Bien sûr, tout ne doit pas être sensible à la casse, mais le serveur doit savoir ce que c'est et comment gérer ces cas.


Le commentaire de @Hart Simha dit essentiellement la même chose. Je l'ai manqué avant de poster donc je veux donner du crédit là où c'est dû.



3

Considérer ce qui suit:

https://www.example.com/createuser.php?name=Paul%20McCartney

Dans cet exemple hypothétique, un formulaire HTML - utilisant la méthode GET - envoie le paramètre "name" à un script PHP qui crée un nouveau compte utilisateur.

Et le point que je fais avec cet exemple est que ce paramètre GET doit être sensible à la casse pour préserver la capitalisation de "McCartney" (ou, comme un autre exemple, pour préserver "Walter d'Isney", car il existe d'autres façons pour que les noms enfreignent les règles de capitalisation habituelles).

Ce sont des cas comme ceux-ci qui guident la recommandation du W3C selon laquelle le schéma et l'hôte ne respectent pas la casse, mais tout ce qui suit est potentiellement sensible à la casse - et est laissé au serveur. Forcer l'insensibilité à la casse par la norme rendrait l'exemple ci-dessus incapable de conserver la casse de l'entrée utilisateur passée en tant que paramètre de requête GET.

Mais ce que je dirais, c'est que bien que ce soit nécessairement la lettre de la loi pour tenir compte de tels cas, l'esprit de la loi est que, lorsque l'affaire n'est pas pertinente, elle se comporte d'une manière insensible à la casse. Les normes, cependant, ne peuvent pas vous dire où le cas n'est pas pertinent parce que, comme les exemples que j'ai donnés, c'est une chose dépendante du contexte.

(Par exemple, il est préférable de forcer un nom d'utilisateur de compte à ne pas respecter la casse - car "User123" et "user123" étant des comptes différents, cela peut prêter à confusion - même si leur vrai nom, comme ci-dessus, est préférable de respecter la casse.)

Parfois, c'est pertinent, la plupart du temps ce n'est pas le cas. Mais il faut laisser au serveur / développeur Web le soin de décider de ces choses - et cela ne peut pas être prescrit par la norme - car ce n'est qu'à ce niveau que le contexte peut être connu.

Le schéma et l'hôte ne respectent pas la casse (ce qui montre la préférence de la norme pour l'insensibilité à la casse, où elle peut être universellement prescrite). Le reste est à vous de décider, car vous comprenez mieux le contexte. Mais, comme cela a été discuté, vous devriez probablement, dans l'esprit de la loi, ne pas respecter l'insensibilité à la casse, sauf si vous avez une bonne raison de ne pas le faire.


Les chaînes de requête sont-elles traitées comme faisant partie de l'emplacement? Je pense qu'ils sont traités comme des entités distinctes et ne sont pas utilisés pour la résolution d'emplacement.
jpmc26

Les chaînes de requête sont distinctes de l'emplacement, oui. Mais les mêmes principes que ceux que j'ai présentés avec les paramètres de requête peuvent également s'appliquer à d'autres parties de l'URL. Certains CMS, par exemple, pourraient réécrire volontairement "/user.php?id=3756" dans "/ users / PaulMcCartney" pour de meilleures URL lisibles par l'homme et optimisées pour le référencement (Wordpress le fait, par exemple). Le fait est que les normes renoncent délibérément à la prescription par rapport à ce qui dépend du contexte. Il appartient au serveur de décider, car le serveur comprend le contexte, où une norme universelle ne peut pas.
Bob

2

Les URL doivent être insensibles à la casse, sauf s'il y a une bonne raison pour qu'elles ne le soient pas.

Ce n'est pas obligatoire (il ne fait partie d'aucune RFC) mais cela rend la communication et le stockage des URL beaucoup plus fiables.

Si j'ai deux pages sur un site Web:

http://stackoverflow.com/ABOUT.html

et

http://stackoverflow.com/about.html

En quoi devraient-ils différer? Peut-être que l'un est écrit «style de cri» (majuscules) - mais d'un point de vue IA, la distinction ne devrait jamais être faite par un changement dans le cas de l'URL.

De plus, il est facile de l'implémenter dans Apache - utilisez simplement CheckSpelling Onmod_Speling.


0

Vieille question, mais j'ai trébuché ici, alors pourquoi ne pas y jeter un coup d'œil, car la question cherche une perspective différente et non une réponse définitive.

Le w3c a peut-être ses recommandations - ce qui m'importe beaucoup - mais je veux y repenser puisque la question est ici.

Pourquoi le w3c considère-t-il que les noms de domaine sont insensibles à la casse et laisse quoi que ce soit après la casse?

Je pense que la raison est que la partie domaine de l'URL est tapée à la main par un utilisateur. Tout après avoir été hyper texte sera résolu par la machine (navigateur et serveur à l'arrière).

Les machines peuvent mieux gérer l'insensibilité à la casse que les humains (pas le genre technique :)).

Mais la question est juste parce que les machines PEUVENT gérer cela devrait-il être fait de cette façon?

Je veux dire quels sont les avantages de nommer et d'accéder à une ressource assise à hereIsTheResourcevs hereistheresource?

Le latéral est très illisible que celui du chameau qui est plus lisible. Lisible pour les humains (y compris le type technique.)

Voici donc mes points: -

Le chemin des ressources se situe quelque part au milieu de la structure de programmation et est parfois proche d'un utilisateur final derrière le navigateur.

Votre URL (à l'exclusion du nom de domaine) doit être insensible à la casse si vos utilisateurs sont censés le toucher ou le taper, etc. Vous devez développer votre application pour ÉVITER que les utilisateurs tapent le chemin autant que possible.

Votre URL (à l'exclusion du nom de domaine) doit être sensible à la casse si vos utilisateurs ne la tapent jamais à la main.

Conclusion

Le chemin doit être sensible à la casse. Mes points pèsent vers les chemins sensibles à la casse.


0

Les caractères d'URL sont convertis en code hexadécimal (si vous avez déjà remarqué des espaces dans les URL affichés en tant que% 20, etc.), et comme les minuscules et les majuscules ont des valeurs hexadécimales différentes, il est parfaitement logique que les URL soient très certainement sensibles à la casse. Cependant, l'esprit de la question semble être DEVRAIT être la norme et je dis non, mais ils le sont. Il appartient au développeur / fournisseur d'en tenir compte dans leur code s'il souhaite que cela fonctionne indépendamment pour un utilisateur final.


Celui-ci est intéressant. les caractères ASCII réguliers (qui ont des majuscules et des minuscules) ne sont pas réellement convertis, n'est-ce pas? ce ne sont que des espaces et des caractères étendus qui sont échappés dans l'url. Certains caractères étendus ont-ils un modificateur majuscule / minuscule?
TygerKrash

0

Je pense que cela et beaucoup de réponses sur ce que la spécification dit ou ne dit pas, c'est le point de la question. Doivent- ils être sensibles à la casse? C'est vraiment une question délicate. Du point de vue d'un utilisateur, la sensibilité à la casse est un point douloureux, tous ne savent pas faire la différence. La question de savoir si les URI doivent ou non être, dépend du contexte de la question. Pour la flexibilité technique, oui, ils devraient l'être. Pour la convivialité, non, ils ne devraient pas l'être.


Pour être juste, toute question demandant "DEVRAIT" est intrinsèquement basée sur l'opinion et pourrait être supprimée de StackOverflow. (Plus: stackoverflow.blog/2010/09/29/good-subjective-bad-subjective )
chharvey

0

Conservation des cas

Les URL respectent la casse , entre le client et le serveur. Mais certaines parties des URL peuvent ou non être sensibles à la casse , selon le serveur, pour deux raisons.

Sensibilité à la casse

Les parties en gras suivantes des URL peuvent être sensibles à la casse, selon le site et / ou la configuration du serveur.

    http: // www. example.com /abc/def.ghi?jkl=mno#pqr

    utilisateur @ exemple.com

Raisonnement

La casse dans les URL peut avoir plusieurs utilisations. Principalement:

  1. Compatibilité native avec les systèmes de fichiers sensibles à la casse.
  2. Encodage de données plus compact dans les URL, comme pour la sérialisation, le hachage, les ID, les permaliens et les raccourcisseurs d'URL.

En tant que développeur, je pense que ce qui précède peut souvent être géré de meilleures façons, mais je comprends également qu'il y a des cas où une situation peut ne pas le permettre.

Par exemple, imaginez un produit existant qui nécessite beaucoup de données placées dans l'URL "GET", mais il doit être compatible avec les longueurs d'URL maximales de tous les principaux serveurs, navigateurs et mécanismes de mise en cache / proxy. Pour s'adapter même à une chaîne de commande de longueur modérée (moins de 1 024 caractères pour certains navigateurs plus anciens), vous devez utiliser tous les caractères uniques sûrs pour les URL que vous pourriez (ce qui est fondamentalement le codage base64url).

Dans un monde idéal

La question de savoir si les URL doivent être sensibles à la casse est discutable. Personnellement, je pense qu'ils ne devraient pas l'être, pour plus de simplicité (bien que cela puisse créer des URL plus longues, nous avons des échappements en pourcentage pour gérer facilement les cas où nous devons garantir la préservation des caractères exacts, et il existe des moyens de transférer des données autres que directement dans l'URL) .

Beaucoup semblent être d'accord sur le fait que les URL insensibles à la casse sont explicitement activées pour de nombreux sites et services populaires, afin d'augmenter la convivialité. L'exemple le plus important est la partie nom d'utilisateur des adresses e-mail. La plupart des fournisseurs de messagerie ignoreront la casse et parfois même les points et autres symboles (comme "j.smith@example.com" étant le même que "JSMITH@example.com"). Même si les noms d'utilisateur de messagerie sont sensibles à la casse par défaut, selon les spécifications.

Cependant, le fait est que malgré ce que moi ou d'autres voudrions, c'est l'état de fonctionnement actuel. Et bien qu'une éventuelle transition mondiale vers une norme d'URL insensible à la casse soit certainement possible, cela prendrait probablement beaucoup de temps car la sensibilité à la casse est actuellement largement utilisée sur le Web à diverses fins.

Les meilleures pratiques

En ce qui concerne les meilleures pratiques, en tant qu'utilisateur, vous pouvez raisonnablement vous limiter aux minuscules pour la plupart des situations et vous attendre à ce que les choses fonctionnent. Les principales exceptions seraient les URL qui utilisent un codage basé sur la casse ou des chemins de document avec des équivalents directs de système de fichiers. Cependant, ces URL complexes sont généralement copiées-collées (ou simplement cliquées) plutôt que tapées manuellement.

En tant que développeur Web, vous devriez envisager de garder les URL aussi sensibles à la casse que possible. Bien qu'il existe clairement des situations difficiles à éviter, selon le contexte, comme indiqué ci-dessus.


-1

la question est de savoir si l'url doit être sensible à la casse?

Je ne vois aucune utilisation ou bonne pratique derrière les URL sensibles à la casse. C'est stupide, ça craint et doit être évité à tout moment.

Juste pour confirmer mon opinion, lorsque quelqu'un demande quelle URL, comment pourriez-vous expliquer quels caractères de l'URL sont en majuscules ou en minuscules? C'est un non-sens et personne ne devrait jamais vous dire le contraire.


32
Il y a un avantage à ce que les URL soient sensibles à la casse. Dans certains sites Web, où les objets sont codés avec des ID uniques auxquels il est possible de se référer via l'URL, le codage peut être quelque chose comme base64 au lieu de base36 . Cela vous permet de coder de manière exponentielle plus d'objets uniques dans le même nombre de caractères URL. Par exemple, foo.com/000 - foo.com/zzz (insensible à la casse) pourrait faire référence à 36 ^ 3 objets uniques, alors que foo.com/000 - foo.com/ZZZ (sensible à la casse, signifiant foo.com/zzz et foo.com/ZZZ sont des chemins différents), feraient référence à 62 ^ 3 objets.
Hart Simha

6
Ce n'est pas une réponse, c'est un commentaire d'opinion.
The Tin Man

1
Je le soutiens avec un exemple. Les URL sont utilisées par des personnes (voir la question d'origine) et non par des ordinateurs. Il est très difficile de voir POURQUOI un lien ne fonctionne pas et puisque presque TOUS les domaines sont insensibles à la casse, le reste de l'URL devrait en faire autant. Les downvotes sont pour mon ton de voix (qui est mauvais), ou parce que les techniciens ont tendance à préférer la beauté technique à l'expérience utilisateur.
HenriKoppen

1
@theTinMan C'est une réponse à la question qui suscite l'opinion.
chharvey

Je suis d'accord avec @HartSimha et puisque la question demande un avis: à moins qu'une partie de la route URL ne soit utilisée pour identifier un objet unique, s'il vous plaît pour l'amour de tout ce qui est bon sur Internet, ne le rendez pas sensible à la casse.
jaybro

-3

Pour les sites Web hébergés sur un serveur Linux, l'URL est sensible à la casse. http://www.google.com/about et http://www.google.com/About seront redirigés vers différents emplacements. Dans un serveur Windows, l'URL est insensible à la casse, comme pour nommer un DOSSIER et sera redirigé vers le même emplacement.


-6

Il est possible de créer des URL non sensibles à la casse

RewriteEngine on
rewritemap lowercase int:tolower
RewriteCond $1 [A-Z]
RewriteRule ^/(.*)$ /${lowercase:$1} [R=301,L]

Rendre Google.com..GOOGLE.com etc. directement sur google.com


Cela ne répond pas à la question
monokrome

3
La question est: "L'URL doit-elle être sensible à la casse?" Votre réponse est: "Comment rendre les URL insensibles à la casse"
realPK
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.