¿La URL debe ser sensible a mayúsculas y minúsculas?


284

Me di cuenta que

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

y

http://stackoverflow.com/questions/ask

ambos funcionan bien, en realidad el anterior se convierte en minúsculas.

Creo que esto tiene sentido para el usuario.

Si miro a Google, esta URL funciona bien:

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

pero este con "ACERCA DE" no funciona:

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

¿La URL debe ser sensible a mayúsculas y minúsculas?


13
En mi humilde opinión, la URL nunca debe ser sensible a mayúsculas y minúsculas, eso solo hace la vida más difícil para las personas que la usarán.
Muhammad Umer

16
La pregunta "¿DEBERÍAN ser sensibles a mayúsculas y minúsculas?" Es una mala pregunta porque invoca la opinión. Más bien, una mejor pregunta sería: "¿POR QUÉ (o POR QUÉ no) las urls distinguen entre mayúsculas y minúsculas?", O "¿Por qué algunas urls distinguen entre mayúsculas y minúsculas y otras no?"
chharvey

Sin embargo, para una respuesta posible, echa un vistazo a la nueva norma URL de WHATWG , que ha sido adoptado por Node.js .
chharvey

en mi opinión, no, no deberían ser
Andrew

si el navegador no respeta el caso, la dirección de ipfs estará rota, pero no está rota
Beeno Tung

Respuestas:


281

De acuerdo con " HTML y URL " de W3, deberían:

Puede haber URL, o partes de URL, donde el caso no importa, pero identificarlas puede no ser fácil. Los usuarios siempre deben considerar que las URL distinguen entre mayúsculas y minúsculas.


95
Supongo que "ser liberal en lo que aceptas y conservador en lo que envías" (discurso de IETF) sería mi guía.
jldupont el

9
La directriz W3 es razonable. Simplemente establece que no se debe suponer cómo el servidor maneja la URL que está enviando. Depende del servidor cómo manejar la URL de solicitud. La mayoría de los servidores web son unix / linux y eso significa que la mayoría de los servidores web distinguen entre mayúsculas y minúsculas.
2013

37
W3 dice que los USUARIOS deben suponer que los servidores distinguen entre mayúsculas y minúsculas, pero no dan una recomendación para los SERVIDORES.
trysis

3
Para mayor resistencia, los programas que interpretan URL deben tratar las letras mayúsculas como equivalentes a las minúsculas en los nombres de los esquemas (por ejemplo, permitir "HTTP" y "http"). Fuente
realPK

3
@PK_ Tenga en cuenta que esto solo es válido para la parte del esquema de la URL. RFC1738 no analiza si otras partes de la URL deben interpretarse como mayúsculas o minúsculas o no.
dthrasher

126

Todos los " insensibles " están en negrita para facilitar la lectura.

Los nombres de dominio no distinguen entre mayúsculas y minúsculas según RFC 4343 . El resto de la URL se envía al servidor a través del método GET. Esto puede ser sensible a mayúsculas o minúsculas.

Tome esta página, por ejemplo, stackoverflow.com recibe GET string / preguntas / 7996919 / should-url-be-case-sensitive , enviando un documento HTML a su navegador. Stackoverflow.com no distingue entre mayúsculas y minúsculas porque produce el mismo resultado para / QUEStions / 7996919 / Should-url-be-case-sensitive .

Por otro lado, Wikipedia distingue entre mayúsculas y minúsculas, excepto el primer carácter del título. Las URL https://en.wikipedia.org/wiki/Case_sensitivity y https://en.wikipedia.org/wiki/case_sensitivity conducen al mismo artículo, pero https://en.wikipedia.org/wiki/CASE_SENSITIVITY devuelve 404


77
Wikipedia en realidad es muy indulgente con la distinción entre mayúsculas y minúsculas en los casos en que los usuarios pueden pensar que una palabra debería ser un caso u otro, pero esto es más debido al TOC ... lo siento, la naturaleza considerada de sus editores. Sin embargo, sus URL son técnicamente sensibles a mayúsculas y minúsculas.
trysis

14
Esto se debe a que la parte semántica y legible de la URL de una pregunta en stackoverflow no lo identifica, se identifica con 7996919. La parte semántica de la URL solo está ahí para fines de SEO.
user3367701

44
En realidad, también /programming/7996919/should-BLABLA-be-or-NOT-to-be funciona. Esto se debe a que el servidor de stackoverflow.com solo usa la ID de la pregunta para identificarla y devolver la URL y la página HTML correctas.
Bozzy

72

Depende del sistema operativo de alojamiento. Los sitios alojados en Windows tienden a no distinguir entre mayúsculas y minúsculas, ya que el sistema de archivos subyacente no distingue entre mayúsculas y minúsculas. Los sitios alojados en sistemas de tipo Unix tienden a distinguir entre mayúsculas y minúsculas, ya que sus sistemas de archivos subyacentes suelen ser sensibles a mayúsculas y minúsculas. La parte del nombre de host de la URL siempre distingue entre mayúsculas y minúsculas, es el resto de la ruta la que varía.


1
Sí, como este se enteró dolorosamente de las solicitudes http a archivos en un servidor ftp Unix.
Laurie Stearn

1
Sería más exacto decir "depende del servidor" en el sentido general, porque servir archivos no es la única forma de responder a las solicitudes HTTP.
Valentin Waeselynck

31

La parte del nombre de dominio de una URL no distingue entre mayúsculas y minúsculas, ya que DNS ignora las mayúsculas http://en.example.org/y minúsculas: HTTP://EN.EXAMPLE.ORG/ambas abren la misma página.

La ruta se usa para especificar y quizás encontrar el recurso solicitado. Es sensible a mayúsculas y minúsculas, aunque algunos servidores lo pueden tratar como insensible a mayúsculas y minúsculas, especialmente aquellos basados ​​en Microsoft Windows.

Si el servidor es sensible a mayúsculas y http://en.example.org/wiki/URLes correcto, http://en.example.org/WIKI/URLo http://en.example.org/wiki/urlmostrará una página de error HTTP 404, a menos que estas URL apuntan a recursos válidos sí mismos.


3
Esta respuesta tiene la única redacción correcta "es sensible a mayúsculas y minúsculas, aunque puede tratarse como insensible a mayúsculas y minúsculas". Solo respuesta válida.
Daniel W.

@DanFromGermany, la ruta distingue entre mayúsculas y minúsculas se puede deducir vagamente desde aquí "Las URL en general distinguen entre mayúsculas y minúsculas (con la excepción de los nombres de las máquinas). Puede haber URL o partes de URL, donde el caso no importa, pero identificando esto puede no ser fácil ". Pero, es ambiguo deducir eso. Como se menciona en un comentario anterior, RFC1738 no discute si partes de la URL que no sean el esquema deben interpretarse como mayúsculas o minúsculas. ¿Tiene algún enlace que aclare qué partes de la URL distinguen entre mayúsculas y minúsculas?
granate

2
@garnet de RFC3986 6.2.2.1. Normalización de casos : cuando un URI usa componentes de la sintaxis genérica, las reglas de equivalencia de sintaxis de componentes siempre se aplican; a saber, que el esquema y el host no distinguen entre mayúsculas y minúsculas y, por lo tanto, deberían normalizarse a minúsculas. Por ejemplo, el URI HTTP://www.EXAMPLE.com/es equivalente a http://www.example.com/. Se supone que los otros componentes de sintaxis genéricos distinguen entre mayúsculas y minúsculas, a menos que el esquema lo defina específicamente ".
Daniel W.

2
@garnet Y del HTTP RFC : " Cuando se comparan dos URI para decidir si coinciden o no, un cliente DEBE usar una comparación de octeto por octeto entre mayúsculas y minúsculas de todos los URI [...] " (con excepción del esquema y host en sí mismo).
Daniel W.

15

No soy fanático de encontrar artículos viejos, pero como esta fue una de las primeras respuestas a este problema en particular, sentí la necesidad de aclarar algo.

Como @Bhavin Shah responde que la parte del dominio de la url no distingue entre mayúsculas y minúsculas, por lo que

http://google.com 

y

http://GOOGLE.COM 

y

http://GoOgLe.CoM 

son todos iguales pero todo después de la parte del nombre de dominio se considera sensible a mayúsculas y minúsculas.

entonces...

http://GOOGLE.COM/ABOUT

y

http://GOOGLE.COM/about

son diferentes.

Nota: Estoy hablando "técnicamente" y no "literalmente" en muchos casos, la mayoría de los servidores están configurados para manejar estos elementos de la misma manera, pero es posible configurarlos para que NO se manejen de la misma manera.

Los diferentes servidores manejan esto de manera diferente y, en algunos casos, deben ser sensibles a mayúsculas y minúsculas. En muchos casos, los valores de la cadena de consulta están codificados (como los Id. De sesión o los datos codificados en Base64 que se pasan como un valor de cadena de consulta).

Entonces, para responder la pregunta, "los servidores" deberían ser sensibles a mayúsculas y minúsculas al tomar estos datos, la respuesta es "sí, definitivamente".

Por supuesto, no todo debe ser sensible a mayúsculas y minúsculas, pero el servidor debe saber qué es y cómo manejar esos casos.


El comentario de @Hart Simha básicamente dice lo mismo. Me lo perdí antes de publicar, así que quiero dar crédito donde se debe.



3

Considera lo siguiente:

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

En este ejemplo hipotético, un formulario HTML, utilizando el método GET, envía el parámetro "nombre" a un script PHP que crea una nueva cuenta de usuario.

Y lo que quiero decir con este ejemplo es que este parámetro GET debe ser sensible a mayúsculas y minúsculas para preservar la capitalización de "McCartney" (o, como otro ejemplo, para preservar "Walter d'Isney", ya que hay otras formas para que los nombres rompan las reglas usuales de mayúsculas).

Son casos como estos los que guían la recomendación del W3C de que el esquema y el host no distinguen entre mayúsculas y minúsculas, pero todo después de eso es potencialmente sensible a mayúsculas y minúsculas y se deja al servidor. Forzar la insensibilidad de mayúsculas y minúsculas por estándar haría que el ejemplo anterior sea incapaz de preservar el caso de la entrada del usuario pasada como un parámetro de consulta GET.

Pero lo que diría es que, aunque esta es necesariamente la letra de la ley para dar cabida a tales casos, el espíritu de la ley es que, cuando el caso es irrelevante, se comportan de manera insensible. Sin embargo, los estándares no pueden decirle dónde el caso es irrelevante porque, al igual que los ejemplos que he dado, depende del contexto.

(por ejemplo, el nombre de usuario de una cuenta probablemente se ve obligado a la insensibilidad a mayúsculas y minúsculas, ya que "User123" y "user123" son cuentas diferentes que pueden resultar confusas, incluso si su nombre real, como se indicó anteriormente, distingue entre mayúsculas y minúsculas).

A veces es relevante, la mayoría de las veces no lo es. Pero tiene que dejarse en manos del desarrollador del servidor / web para decidir estas cosas, y no se puede prescribir de manera estándar, ya que solo a ese nivel se podría conocer el contexto.

El esquema y el host no distinguen entre mayúsculas y minúsculas (lo que muestra la preferencia del estándar por la insensibilidad a mayúsculas y minúsculas, donde se puede prescribir universalmente). El resto depende de usted para decidir, ya que comprende mejor el contexto. Pero, como se ha discutido, probablemente debería, en el espíritu de la ley, dejar de ser insensible a los casos a menos que tenga una buena razón para no hacerlo.


¿Las cadenas de consulta se tratan como parte de la ubicación? Creo que se tratan como entidades separadas y no se utilizan para la resolución de ubicaciones.
jpmc26

Las cadenas de consulta están separadas de la ubicación, sí. Pero los mismos principios que he mostrado allí con los parámetros de consulta también pueden aplicarse a otras partes de la URL. Algunos CMS, por ejemplo, podrían reescribir a propósito "/user.php?id=3756" a "/ users / PaulMcCartney" para obtener mejores URL legibles para humanos que sean amigables con SEO (Wordpress hace esto, por ejemplo). El punto es que los estándares se apartan deliberadamente de la prescripción sobre lo que depende del contexto. Le corresponde al servidor decidir, ya que el servidor comprende el contexto, donde un estándar universal no puede.
Bob

2

Las URL deben ser insensibles a mayúsculas y minúsculas a menos que haya una buena razón por la que no lo sean.

Esto no es obligatorio (no es parte de un RFC) pero hace que la comunicación y el almacenamiento de URL sean mucho más confiables.

Si tengo dos páginas en un sitio web:

http://stackoverflow.com/ABOUT.html

y

http://stackoverflow.com/about.html

¿Cómo deberían diferir? Tal vez uno está escrito 'estilo de gritos' (mayúsculas), pero desde el punto de vista de IA, la distinción nunca debe hacerse por un cambio en el caso de la URL.

Además, es fácil implementar esto en Apache, solo utilícelo CheckSpelling Ondesde mod_Speling.


0

Antigua pregunta, pero me tropecé aquí, así que, ¿por qué no intentarlo ya que la pregunta busca una perspectiva diferente y no una respuesta definitiva?

w3c puede tener sus recomendaciones, lo cual me importa mucho, pero quiero repensarlo ya que la pregunta está aquí.

¿Por qué w3c considera que los nombres de dominio no distinguen entre mayúsculas y minúsculas y deja algo después?

Estoy pensando que la razón es que la parte del dominio de la URL está escrita a mano por un usuario. Todo después de ser hipertexto será resuelto por la máquina (navegador y servidor en la parte posterior).

Las máquinas pueden manejar la insensibilidad a las mayúsculas y minúsculas mejor que los humanos (no el tipo técnico :)).

Pero la pregunta es solo porque las máquinas PUEDEN manejar eso, ¿debería hacerse de esa manera?

Quiero decir, ¿cuáles son los beneficios de nombrar y acceder a un recurso en hereIsTheResourcevs hereistheresource?

El lateral es muy ilegible que el caso de camello que es más legible. Legible para los humanos (incluido el tipo técnico).

Así que aquí están mis puntos:

Resource Path se encuentra en algún lugar en el medio de la estructura de programación y a veces está cerca de un usuario final detrás del navegador.

Su URL (excluyendo el nombre de dominio) no debe distinguir entre mayúsculas y minúsculas si se espera que sus usuarios la toquen o la escriban, etc. Debe desarrollar su aplicación para EVITAR que los usuarios escriban la ruta lo más posible.

Su URL (excluyendo el nombre de dominio) debe ser sensible a mayúsculas y minúsculas si sus usuarios nunca la escribirán a mano.

Conclusión

La ruta debe ser sensible a mayúsculas y minúsculas. Mis puntos están pesando hacia los caminos sensibles a mayúsculas y minúsculas.


0

Los caracteres de URL se convierten en código hexadecimal (si alguna vez ha notado que los espacios en las URL se muestran como% 20, etc.), y dado que las mayúsculas y minúsculas tienen valores hexadecimales diferentes, tiene mucho sentido que las URL distingan entre mayúsculas y minúsculas. Sin embargo, el espíritu de la pregunta parece ser el estándar y yo digo que no, pero lo son. Depende del desarrollador / proveedor dar cuenta de esto en su código si quieren que funcione independientemente de un usuario final.


Este es uno interesante. Los caracteres ASCII regulares (que tienen mayúsculas y minúsculas) no se convierten realmente, ¿verdad? solo los espacios y caracteres extendidos se escapan en la url. ¿Algún carácter extendido tiene un modificador de mayúsculas / minúsculas?
TygerKrash

0

Creo que esto y muchas de las respuestas en torno a lo que dice o no dice la especificación falta el punto de la pregunta. ¿Deberían ser sensibles a mayúsculas y minúsculas? Esa es una pregunta cargada realmente. Desde el punto de vista del usuario, la sensibilidad a las mayúsculas y minúsculas es un punto de dolor, no todo lo que sabe hace la diferencia. La cuestión de si los URI deberían o no ser, depende del contexto de la pregunta. Por flexibilidad técnica, sí, deberían serlo. Por usabilidad, no, no deberían serlo.


Para ser justos, cualquier pregunta que haga "DEBE" está inherentemente basada en opiniones y podría eliminarse de StackOverflow. (Más información: stackoverflow.blog/2010/09/29/good-subjective-bad-subjective )
chharvey

0

Preservación de casos

Las URL conservan mayúsculas y minúsculas entre el cliente y el servidor. Pero partes de las URL pueden o no ser sensibles a mayúsculas y minúsculas , dependiendo del servidor, por un par de razones.

Sensibilidad del caso

Las siguientes partes en negrita de las URL pueden distinguir entre mayúsculas y minúsculas, según el sitio o la configuración del servidor.

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

    usuario @ example.com

Razón fundamental

Las mayúsculas y minúsculas en las URL pueden tener varios usos. Principalmente:

  1. Compatibilidad nativa con sistemas de archivos sensibles a mayúsculas y minúsculas.
  2. Codificación de datos más compacta dentro de las URL, como la serialización, el hash, las ID, los enlaces permanentes y los acortadores de URL.

Como desarrollador, creo que lo anterior a menudo se puede manejar de mejor manera, pero también entiendo que hay casos en los que una situación puede no permitir esto.

Por ejemplo, imagine un producto existente que requiere una gran cantidad de datos ubicados en la URL "GET", pero debe ser compatible con las longitudes máximas de URL de todos los principales servidores, navegadores y mecanismos de almacenamiento en caché / proxy. Para ajustar incluso una cadena de comando de longitud moderada (menos de 1,024 caracteres para algunos navegadores más antiguos), necesitaría usar todos los caracteres únicos seguros para URL que pueda (que es básicamente lo que es la codificación base64url).

En un mundo ideal

Es discutible si las URL deben ser sensibles a mayúsculas y minúsculas. Personalmente, creo que no deberían serlo, por simplicidad (aunque puede crear URL más largas, tenemos porcentajes de escape para manejar fácilmente los casos en los que debemos garantizar la preservación de los caracteres exactos, y hay formas de transferir datos que no sean directamente en la URL) .

Muchos parecen estar de acuerdo con el hecho de que las URL que no distinguen entre mayúsculas y minúsculas están explícitamente habilitadas para muchos sitios y servicios populares, con el fin de aumentar la usabilidad. El ejemplo más destacado es la parte del nombre de usuario de las direcciones de correo electrónico. La mayoría de los proveedores de correo electrónico ignorarán mayúsculas y minúsculas y, a veces, incluso puntos y otros símbolos (como "j.smith@example.com" es lo mismo que "JSMITH@example.com"). Aunque los nombres de usuario de correo electrónico distinguen entre mayúsculas y minúsculas, según las especificaciones.

Sin embargo, el hecho es que a pesar de lo que yo u otros podríamos querer, este es el estado de cómo funcionan las cosas actualmente. Y si bien es posible una eventual transición mundial a un estándar de URL que no distinga entre mayúsculas y minúsculas, es probable que lleve bastante tiempo ya que la distinción entre mayúsculas y minúsculas se usa ampliamente en la web para diversos fines.

Mejores prácticas

En lo que respecta a las mejores prácticas, como usuario puede razonablemente seguir en minúsculas para la mayoría de las situaciones y esperar que las cosas funcionen. Las principales excepciones serían las URL que usan codificación basada en casos o rutas de documentos con equivalentes directos del sistema de archivos. Sin embargo, estas URL complejas suelen copiarse (o simplemente hacer clic) en lugar de escribirse manualmente.

Como desarrollador web, debe considerar mantener las URL tan insensibles a mayúsculas como sea posible. Aunque claramente hay algunas situaciones difíciles de evitar, según el contexto, como se señaló anteriormente.


-1

la pregunta es ¿la url debe ser sensible a mayúsculas y minúsculas?

No veo ningún uso o buena práctica detrás de las URL sensibles a mayúsculas y minúsculas. Es estúpido, apesta y debe evitarse en todo momento.

Solo para respaldar mi opinión, cuando alguien pregunta qué URL, ¿cómo podría explicar qué caracteres de la URL son mayúsculas o minúsculas? Eso no tiene sentido y nadie debería decirte lo contrario.


32
Hay una ventaja de que las URL distinguen entre mayúsculas y minúsculas. En algunos sitios web, donde los objetos están codificados con ID únicos a los que se puede hacer referencia a través de la URL, la codificación puede ser algo así como base64 en lugar de base36 . Esto le permite codificar exponencialmente más objetos únicos en el mismo número de caracteres URL. Por ejemplo, foo.com/000 - foo.com/zzz (sin distinción entre mayúsculas y minúsculas) podría referirse a 36 ^ 3 objetos únicos, donde foo.com/000 - foo.com/ZZZ (mayúsculas y minúsculas, que significa foo.com/zzz y foo.com/ZZZ son caminos diferentes), se referirían a 62 ^ 3 objetos.
Hart Simha

66
Esta no es una respuesta, es un comentario obstinado.
The Tin Man

1
Lo respaldo con un ejemplo. Las URL son utilizadas por personas -ver pregunta original-, no por computadoras. Es muy difícil, por lo que vea POR QUÉ un enlace no funciona y, dado que casi TODOS los dominios no distinguen entre mayúsculas y minúsculas, también debería hacerlo el resto de la URL. Los votos negativos son para mi tono de voz (que es malo) o porque las personas técnicas tienden a elegir la belleza técnica sobre la experiencia del usuario.
HenriKoppen

1
@theTinMan Es una respuesta a la pregunta que evoca opiniones.
chharvey

Estoy de acuerdo con @HartSimha y dado que la pregunta pide opinión: a menos que parte de la ruta URL se utilice para identificar un objeto único, por amor a todo lo que es bueno en Internet, NO lo distinga entre mayúsculas y minúsculas.
jaybro

-3

Para los sitios web alojados en un servidor Linux, la URL distingue entre mayúsculas y minúsculas. http://www.google.com/about y http://www.google.com/About serán redirigidos a diferentes ubicaciones. Mientras está en un servidor de Windows, la URL no distingue entre mayúsculas y minúsculas, como al nombrar una CARPETA y se redirigirá a la misma ubicación.


-6

Es posible hacer URL no sensibles a mayúsculas y minúsculas

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

Hacer que Google.com..GOOGLE.com, etc.se dirija directamente a google.com


Esto no responde la pregunta
monokrome

3
La pregunta es: "¿La URL debe ser sensible a mayúsculas y minúsculas?" Su respuesta es: "Cómo hacer URL insensibles a mayúsculas y minúsculas"
realPK
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.