web-dev-qa-db-fra.com

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

J'ai remarqué que 

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

et 

http://stackoverflow.com/questions/ask

les deux fonctionnent très bien - en réalité le précédent est converti en minuscule.

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

Si je regarde Google alors cette URL fonctionne bien:

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

mais celui avec "ABOUT" ne fonctionne pas: 

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

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

249
Imageree

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

Il peut y avoir des URL, ou des parties d’URL, où la casse n’importe pas, mais les identifier peut ne pas être facile. Les utilisateurs devraient toujours considérer cela Les URL sont sensibles à la casse.

243
jldupont

Tous les «insensibles} _» sont en gras pour la lisibilité.

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

Par exemple, stackoverflow.com reçoit la chaîne GET /questions/7996919/should-url-be-case-sensitive , en envoyant un document HTML à votre navigateur. Stackoverflow.com est cas insensible parce qu'il produit le même résultat pour /QUEStions/7996919/Should-url-be-case-sensible .

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 mène au même article, mais https: //. en.wikipedia.org/wiki/CASE_SENSITIVITY retourne 404.

111
jdh8

Dépend de l'OS d'hébergement. Les sites hébergés sur Windows ont tendance à ne pas être sensibles à 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 le sont généralement. La partie du nom d'hôte de l'URL est toujours sensible à la casse, c'est le reste du chemin qui varie.

66
Jim Nutt

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 HTTP://EN.EXAMPLE.ORG/ 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 que certains serveurs, en particulier ceux basés sur Microsoft Windows, puissent le considérer comme insensible à la casse.

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

29
Bhavin Shah

Je ne suis pas un adepte de la suppression d'anciens articles, mais comme c'était l'une des premières réponses à ce problème, 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, 

http://google.com 

et 

http://GOOGLE.COM 

et 

http://GoOgLe.CoM 

sont identiques mais tout ce qui suit la partie de nom de domaine est considéré comme sensible à la casse. 

alors...

http://GOOGLE.COM/ABOUT

et

http://GOOGLE.COM/about

sont différents.

Note: Je parle "techniquement" et non "littéralement" dans beaucoup de 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 pour qu'ils ne soient PAS traités de la même manière.

Différents serveurs traitent 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 codées en Base64 transmises en tant que valeur de chaîne de requête). Ces éléments sont sensibles à la casse par nature.

Donc, pour répondre à la question "Les" serveurs devraient-ils être sensibles à la casse lors de la récupération 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 de quoi il s'agit et comment gérer ces cas.


Le commentaire de @Hart Simha dit essentiellement la même chose. Je l'ai manquée avant de poster, donc je veux donner un crédit lorsque le crédit est dû.

14
Kenneth Garza

Regardez la spécification ici: .__ section 2.7.3 http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-25#page-19

Le schéma et l'hôte ne tiennent pas compte de la casse et sont généralement fournis en minuscule; tous les autres composants sont comparés de manière sensible à la casse manière.

5
Nitin

Les URL doivent être insensibles à la casse, sauf s’il existe une bonne raison pour lesquelles elles ne le devraient pas. 

Ce n'est pas obligatoire (cela ne fait pas partie d'une 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

Comment devraient-ils différer? Peut-être que l'un est écrit 'style de cri' (majuscule) - mais d'un point de vue d'analyse d'impact, la distinction ne devrait jamais être faite par un changement dans le cas de l'URL.

De plus, cela est facile à implémenter dans Apache - utilisez simplement CheckSpelling On de mod_Speling. 

2
konchog

Vieille question, mais je suis tombé ici, alors pourquoi ne pas tenter le coup puisque la question cherche différentes perspectives et non une réponse définitive.

w3C a peut-être ses recommandations - ce qui me tient à coeur - mais je souhaite repenser, la question étant ici.

Pourquoi W3C considère-t-il que les noms de domaine sont insensibles à la casse et ne laissent rien après? 

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

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

Mais la question est simplement 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’avoir accès à une ressource assise à hereIsTheResource vs hereistheresource?

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

Alors voici mes points: -

Resource Path se situe quelque part au milieu de la structure de programmation et se trouve parfois proche de l'utilisateur final derrière le navigateur.

Votre URL (à l'exclusion du nom de domaine) doit être sensible à la casse si vos utilisateurs sont supposés la toucher, la taper etc. 

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

Conclusion

Path devrait être sensible à la casse. Mes points pèsent vers les chemins sensibles à la casse. 

0
bhantol

Conservation des cas

Les URL sont préservant la casse , entre le client et le serveur. Mais des portions d'URL peuvent ou non être sensibles à la casse , en fonction du serveur, pour plusieurs raisons.

Sensibilité à la casse

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

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

tilisateur @ exemple.com

Raisonnement

La sensibilité à la casse dans les URL peut avoir plusieurs utilisations. Principalement:

  1. Compatibilité native avec les systèmes de fichiers sensibles à la casse.
  2. Encodage plus compact des données dans les URL, par exemple 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 mieux géré, mais je comprends aussi 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", tout en restant compatible avec les longueurs d'URL maximales de tous les principaux serveurs, navigateurs et mécanismes de mise en cache/proxy. Pour adapter même une chaîne de commande de longueur moyenne (moins de 1 024 caractères pour certains navigateurs plus anciens), vous devez utiliser chaque caractère unique sûr pour les URL (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, par souci de simplicité (bien que cela puisse créer des URL plus longues, nous avons des échappements pour nous permettre de gérer facilement les cas dans lesquels nous devons garantir la conservation des caractères exacts, et il existe des moyens de transférer des données autres que dans l’URL) .

Beaucoup semblent s'accorder sur le fait que les URL insensibles à la casse sont explicitement activées pour de nombreux sites et services populaires, afin d'accroître la convivialité. L'exemple le plus frappant est la partie nom d'utilisateur des adresses électroniques. La plupart des fournisseurs de messagerie ignorent la casse et parfois même les points et autres symboles (comme "[email protected]" étant identique à "[email protected]"). Même si les noms d'utilisateur de courrier électronique sont sensibles à la casse par défaut, conformément aux spécifications.

Cependant, le fait est que, malgré ce que moi-même ou d’autres personnes pourraient souhaiter, c’est l’état actuel du fonctionnement. Et si une éventuelle transition mondiale vers une norme d'URL respectant la casse est 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 vous en tenir à la minuscule dans la plupart des situations et vous attendre à ce que tout se passe bien. Les principales exceptions sont les URL qui utilisent un codage basé sur des cas ou des chemins de document avec des équivalents directs du système de fichiers. Toutefois, ces URL complexes sont généralement copiées-collées (ou simplement cliquées) plutôt que saisies 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.

0
Beejor

Les caractères des URL sont convertis en code hexadécimal (si vous avez déjà remarqué que des espaces dans les URL étaient affichés sous la forme% 20, etc.) et que les minuscules et les majuscules avaient des valeurs hexadécimales différentes, il était donc parfaitement logique que les URL soient très 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 son code s'il souhaite que cela fonctionne indépendamment de l'utilisateur final.

0
Guest

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 d'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 autre exemple, pour préserver "Walter d'Isney", car il existe d'autres moyens 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 lesquels schéma et hôte ne sont pas sensibles à la casse, mais tout ce qui suit est potentiellement sensible à la casse - et est laissé au serveur. Forcer l'insensibilité à la casse par rapport à la norme rendrait l'exemple ci-dessus incapable de préserver le cas d'une entrée utilisateur transmise 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, il faut se comporter de manière à ne pas être sensible à la casse. Les normes, cependant, ne peuvent pas vous dire où l'affaire est sans importance parce que, comme les exemples que j'ai donnés, c'est une chose dépendante du contexte.

(Par exemple, un nom d'utilisateur de compte est probablement mieux contraint de tenir compte de l'insensibilité à la casse - car les comptes différents de "User123" et "user123" pourraient être source de confusion - même si leur nom réel, comme indiqué ci-dessus, reste sensible à la casse.)

Parfois c'est pertinent, la plupart du temps ça ne l'est pas. Mais il faut laisser le choix au serveur/développeur Web 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 sont insensibles à la casse (ce qui indique la préférence de la norme pour l'insensibilité à la casse, où elle peut être prescrite universellement). 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, passer par défaut à l’insensibilité à la casse, sauf si vous avez une bonne raison de ne pas le faire.

0
Bob