¿Por qué las URL distinguen entre mayúsculas y minúsculas?

54

Mi pregunta: cuando se diseñaron las URL por primera vez, ¿por qué la distinción entre mayúsculas y minúsculas se convirtió en una característica? Pregunto esto porque me parece (es decir, un laico) que se preferiría la mayúsculas y minúsculas para evitar errores innecesarios y simplificar una cadena de texto ya complicada.

Además, ¿existe un propósito / ventaja real de tener una URL que distinga entre mayúsculas y minúsculas (a diferencia de la gran mayoría de las URL que apuntan a la misma página sin importar las mayúsculas)?

Wikipedia, por ejemplo, es un sitio web sensible a las mayúsculas y minúsculas (excepto el primer carácter):

https://en.wikipedia.org/wiki/St Un ck_Exchange es DOA.

Kyle
fuente
11
Obviamente no ejecuta IIS en Windows
John Conde
53
Me imagino que itscrap.com, expertsexchange y whorepresents.com preferirían que más personas usaran nombres que distingan entre mayúsculas y minúsculas. Para obtener más información, consulte boredpanda.com/worst-domain-names .
Eric Towers
22
Las URL se diseñaron cuando los dinosaurios representados en sistemas Unix deambulaban por la Tierra, y Unix distingue entre mayúsculas y minúsculas.
Thorbjørn Ravn Andersen
11
Wikipedia intenta utilizar las mayúsculas correctas para el título del tema y utiliza redireccionamientos para diferencias comunes. p.ej. html, htmy Htmltodos redirigen a HTML. Pero lo que es más importante, debido al enorme tema, es posible tener más de una página donde la URL solo difiere según el caso. Por ejemplo: Latex y LaTeX
MrWhite
77
@ edc65 Pero Kobi afirma que partes de la URL (especialmente la ruta ) distinguen entre mayúsculas y minúsculas, entonces, ¿eso no hace que la URL distinga entre mayúsculas y minúsculas?
MrWhite

Respuestas:

8

¿Por qué la URL no distingue entre mayúsculas y minúsculas?

Entiendo que puede parecer un tipo de pregunta retórica provocativa (y "defensora del diablo"), pero creo que es útil considerarla. El diseño de HTTP es que un "cliente", que comúnmente llamamos un "navegador web", solicita datos al "servidor web".

Hay muchos, muchos servidores web diferentes que se lanzan. Microsoft ha lanzado IIS con sistemas operativos Windows Server (y otros, incluido Windows XP Professional). Unix tiene pesos pesados ​​como nginx y Apache, sin mencionar ofertas más pequeñas como httpd, thttpd o lighttpd interno de OpenBSD. Además, muchos dispositivos con capacidad de red tienen servidores web integrados que se pueden usar para configurar el dispositivo, incluidos los dispositivos con fines específicos para redes, como enrutadores (incluidos muchos puntos de acceso Wi-Fi y módems DSL) y otros dispositivos como impresoras o UPS (unidades de fuente de alimentación ininterrumpida con respaldo de batería) que pueden tener conectividad de red.

Entonces, la pregunta, "¿Por qué las URL distinguen entre mayúsculas y minúsculas?", Es preguntar, "¿Por qué los servidores web tratan las URL como mayúsculas y minúsculas?" Y la respuesta real es: no todos hacen eso. Al menos un servidor web, que es bastante popular, generalmente NO distingue entre mayúsculas y minúsculas. (El servidor web es IIS).

Una razón clave para un comportamiento diferente entre diferentes servidores web probablemente se reduce a una cuestión de simplicidad. La manera simple de hacer un servidor web es hacer las cosas de la misma manera que la forma en que el sistema operativo de la computadora / dispositivo ubica los archivos. Muchas veces, los servidores web localizan un archivo para proporcionar una respuesta. Unix se diseñó alrededor de computadoras de gama alta, por lo que Unix proporcionó la funcionalidad deseable de permitir letras mayúsculas y minúsculas. Unix decidió tratar mayúsculas y minúsculas como diferentes porque, bueno, son diferentes. Esa es la cosa directa y natural que hacer. Windows tiene un historial de distinción entre mayúsculas y minúsculas debido a un deseo de admitir software ya creado, y este historial se remonta a DOS que simplemente no admitía letras minúsculas, posiblemente en un esfuerzo por simplificar las cosas con computadoras menos potentes que usan menos memoria. Dado que estos sistemas operativos son diferentes, el resultado es que los servidores web de diseño simple (versiones anteriores de) reflejan las mismas diferencias.

Ahora, con todo ese trasfondo, aquí hay algunas respuestas específicas a las preguntas específicas:

Cuando se diseñaron las URL por primera vez, ¿por qué se hizo distinción entre mayúsculas y minúsculas?

Por qué no? Si todos los servidores web estándar no distinguen entre mayúsculas y minúsculas, eso indicaría que los servidores web estaban siguiendo un conjunto de reglas especificadas por la norma. Simplemente no había una regla que diga que el caso debe ser ignorado. La razón por la que no hay una regla es simplemente que no había razón para que existiera dicha regla. ¿Por qué molestarse en inventar reglas innecesarias?

Pregunto esto porque me parece (es decir, un laico) que se preferiría la mayúsculas y minúsculas para evitar errores innecesarios y simplificar una cadena de texto ya complicada.

Las URL fueron diseñadas para que las máquinas las procesen. Aunque una persona puede escribir una URL completa en una barra de direcciones, esa no fue una parte importante del diseño previsto. El diseño previsto es que la gente seguiría ("haga clic en") hipervínculos. Si la gente promedio está haciendo eso, entonces realmente no les importa si la URL invisible es simple o complicada.

Además, ¿existe un propósito / ventaja real de tener una URL que distinga entre mayúsculas y minúsculas (a diferencia de la gran mayoría de las URL que apuntan a la misma página sin importar las mayúsculas)?

El quinto punto numerado de la respuesta de William Hay menciona una ventaja técnica: las URL pueden ser una forma efectiva para que un navegador web envíe un poco de información a un servidor web, y se puede incluir más información si hay menos restricciones, por lo que se distingue entre mayúsculas y minúsculas. la restricción reduciría la cantidad de información que se puede incluir.

Sin embargo, en muchos casos, no hay un beneficio súper convincente para la sensibilidad a mayúsculas y minúsculas, lo que se demuestra por el hecho de que IIS generalmente no se molesta con él.

En resumen, la razón más convincente es probablemente la simplicidad para quienes diseñaron el software del servidor web, particularmente en una plataforma sensible a mayúsculas y minúsculas como Unix. (HTTP no fue algo que influyó en el diseño original de Unix, ya que Unix es notablemente más antiguo que HTTP).

TOOGAM
fuente
"Una razón clave para un comportamiento diferente entre los diferentes navegadores web probablemente se reduce a una cuestión de simplicidad". - Supongo que te refieres a "servidores web", en lugar de "navegadores web" aquí y en un par de otros lugares.
MrWhite
2
Actualizado. Revisó cada caso de "navegadores" e hizo múltiples reemplazos. Gracias por señalar esto para mejorar la calidad.
TOOGAM
1
He recibido varias respuestas excelentes a mi pregunta, que van desde lo histórico hasta lo técnico. Dudo en ir contra la corriente y aceptar una respuesta de menor calificación, pero la respuesta de @ TOOGAM fue la más útil para mí. Esta respuesta es exhaustiva y extensa, pero explica el concepto de una manera sencilla y conversacional que puedo entender. Y creo que esta respuesta es una buena introducción a las explicaciones más detalladas.
Kyle
74

Las URL no distinguen entre mayúsculas y minúsculas, solo partes de ellas.
Por ejemplo, nada distingue entre mayúsculas y minúsculas en la URL https://google.com,

Con referencia a RFC 3986 - Identificador uniforme de recursos (URI): sintaxis genérica

Primero, desde Wikipedia , una URL se ve así:

 scheme:[//host[:port]][/]path[?query][#fragment]

(He eliminado la user:passwordparte porque no es interesante y rara vez se usa)

los esquemas no distinguen entre mayúsculas y minúsculas

El subcomponente del host no distingue entre mayúsculas y minúsculas.

El componente de ruta contiene datos ...

El componente de consulta contiene datos no jerárquicos ...

Los tipos de medios individuales pueden definir sus propias restricciones o estructuras dentro de la sintaxis del identificador de fragmento para especificar diferentes tipos de subconjuntos, vistas o referencias externas

Por lo tanto, schemey no hostdistinguen entre mayúsculas y minúsculas.
El resto de la URL distingue entre mayúsculas y minúsculas.

¿Por qué es pathsensible a mayúsculas y minúsculas?

Esta parece ser la pregunta principal.
Es difícil responder "por qué" se hizo algo si no estaba documentado, pero podemos adivinar muy bien.
He elegido citas muy específicas de la especificación, con énfasis en los datos .
Miremos la URL nuevamente:

 scheme:[//host[:port]][/]path[?query][#fragment]
 \____________________/\________________________/
        Location                 Data
  • Ubicación: la ubicación tiene una forma canónica y no distingue entre mayúsculas y minúsculas. ¿Por qué? Probablemente para poder comprar un nombre de dominio sin tener que comprar miles de variantes.

  • Datos: el servidor de destino utiliza los datos y la aplicación puede elegir lo que significa . No tendría ningún sentido hacer que los datos no distingan entre mayúsculas y minúsculas. La aplicación debería tener más opciones, y la definición de mayúsculas y minúsculas en la especificación limitará estas opciones.
    Esta es también una distinción útil para HTTPS: los datos están encriptados , pero el host está visible.

¿Es útil?

La distinción entre mayúsculas y minúsculas tiene sus dificultades cuando se trata de almacenamiento en caché y URL canónicas, pero sin duda es útil. Algunos ejemplos:

Kobi
fuente
1
"Las URL no distinguen entre mayúsculas y minúsculas". / "El resto de la URL distingue entre mayúsculas y minúsculas". - Esto parece ser una contradicción?
MrWhite
8
En verdad, el esquema define qué esperar en el resto de la URL. http:y esquemas relacionados significan que la URL se refiere a un nombre de host DNS. DNS no distingue entre mayúsculas y minúsculas ASCII mucho antes de la invención de las URL. Consulte la página 55 de ietf.org/rfc/rfc883.txt
O. Jones
3
Muy bien detallado! Iba desde un punto de vista histórico. Originalmente era la ruta del archivo que debía ser sensible a mayúsculas y minúsculas solo si estaba presionando el sistema de archivos. De lo contrario, no fue así. Pero hoy las cosas han cambiado. Por ejemplo, los parámetros y CGI no existían originalmente. Su respuesta toma una perspectiva del día actual. ¡Tenía que recompensar tus esfuerzos! ¡Realmente profundizaste en este! ¿Quién sabía que esto explotaría como lo hizo? ¡¡Salud!!
closetnoc
2
@ w3dk: es un capricho no muy interesante de la terminología, pero se puede considerar que "distingue entre mayúsculas y minúsculas", "cambiar el caso de un personaje puede cambiar el conjunto", o podría tomarlo en el sentido de "cambiar el el caso de un personaje siempre cambia todo ". Kobi parece estar afirmando lo último, prefiere que distinga entre mayúsculas y minúsculas debería significar "cualquier cambio en el caso es significativo", lo que por supuesto no es cierto para las URL. Prefieres lo primero. Es solo una cuestión de cuán sensibles son al caso.
Steve Jessop
2
@ rybo111: si un usuario escribe example.com/fOObaR , la especificación requiere que el servidor en www.example.com reciba una ruta "/ fOObaR" como se indica; no dice nada sobre si el servidor debe tratarlo de manera diferente a "/ foOBaR".
supercat
59

Sencillo. El sistema operativo distingue entre mayúsculas y minúsculas. A los servidores web generalmente no les importa a menos que tengan que acceder al sistema de archivos en algún momento. Aquí es donde Linux y otros sistemas operativos basados ​​en Unix hacen cumplir las reglas del sistema de archivos, en cuyo caso la sensibilidad es una parte importante. Es por eso que IIS nunca ha sido sensible a mayúsculas y minúsculas; porque Windows nunca fue sensible a mayúsculas y minúsculas.

[Actualizar]

Ha habido algunos argumentos contundentes en los comentarios (desde que se eliminaron) sobre si las URL tienen alguna relación con el sistema de archivos como he dicho. Estos argumentos se han calentado. Es extremadamente miope creer que no hay una relación. ¡Absolutamente lo hay! Déjame explicarte más.

Los programadores de aplicaciones generalmente no son programadores internos de sistemas. No estoy siendo insultante. Son dos disciplinas separadas y no se requiere conocimiento interno del sistema para escribir aplicaciones cuando las aplicaciones simplemente pueden hacer llamadas al sistema operativo. Dado que los programadores de aplicaciones no son programadores internos del sistema, no es posible omitir los servicios del sistema operativo. Digo esto porque estos son dos campos separados y rara vez se cruzan. Las aplicaciones se escriben para usar los servicios del sistema operativo como regla. Hay raras excepciones, por supuesto.

Cuando los servidores web comenzaron a aparecer, los desarrolladores de aplicaciones no intentaron eludir los servicios del sistema operativo. Hubieron varias razones para esto. Uno, no era necesario. Dos, los programadores de aplicaciones generalmente no sabían cómo evitar los servicios del sistema operativo. Tres, la mayoría de los sistemas operativos eran extremadamente estables y robustos, o extremadamente simples y livianos y no valían la pena el costo.

Tenga en cuenta que los primeros servidores web se ejecutaban en computadoras costosas, como los servidores DEC VAX / VMS y Unix del día (Berkeley y Ultrix, así como otros) en computadoras de marco principal o de marco medio, y luego poco después Computadoras livianas como PC y Windows 3.1. Cuando comenzaron a aparecer motores de búsqueda más modernos, como Google en 1997/8, Windows se mudó a Windows NT y otros sistemas operativos como Novell y Linux también comenzaron a ejecutar servidores web. Apache era el servidor web dominante, aunque había otros como IIS y O'Reilly que también eran muy populares. Ninguno de ellos en el momento pasó por alto los servicios del sistema operativo. Es probable que ninguno de los servidores web lo haga incluso hoy.

Los primeros servidores web eran bastante simples. Todavía lo son hoy. Cualquier solicitud realizada para un recurso a través de una solicitud HTTP que existe en un disco duro fue realizada por el servidor web a través del sistema de archivos del sistema operativo.

Los sistemas de archivos son mecanismos bastante simples. Cuando se realiza una solicitud de acceso a un archivo, si ese archivo existe, la solicitud se pasa al subsistema de autorización y, si se concede, la solicitud original se satisface. Si el recurso no existe o no está autorizado, el sistema genera una excepción. Cuando una aplicación realiza una solicitud, se establece un activador y la aplicación espera. Cuando se responde la solicitud, se lanza el desencadenador y la aplicación procesa la respuesta de la solicitud. Todavía funciona de esa manera hoy. Si la aplicación ve que la solicitud ha sido satisfecha, continúa, si ha fallado, la aplicación ejecuta una condición de error dentro de su código o muere si no se maneja. Sencillo.

En el caso de un servidor web, suponiendo que se realiza una solicitud de URL para una ruta / archivo, el servidor web toma la porción de ruta / archivo de la solicitud de URL (URI) y realiza una solicitud al sistema de archivos y está satisfecho o lanza una excepción. El servidor web luego procesa la respuesta. Si, por ejemplo, la ruta y el archivo solicitados se encuentran y el subsistema de autorización otorga el acceso, el servidor web procesa esa solicitud de E / S de manera normal. Si el sistema de archivos arroja una excepción, el servidor web devuelve un error 404 si el archivo no se encuentra o un 403 prohibido si el código de motivo no está autorizado.

Dado que algunos sistemas operativos distinguen entre mayúsculas y minúsculas y los sistemas de archivos de este tipo requieren coincidencias exactas, la ruta / archivo que se solicita al servidor web debe coincidir exactamente con lo que existe en el disco duro. La razón de esto es simple. Los servidores web no adivinan a qué te refieres. Ninguna computadora lo hace sin estar programado para hacerlo. Los servidores web simplemente procesan las solicitudes a medida que las reciben. Si la porción de ruta / archivo de la solicitud de URL que se pasa directamente al sistema de archivos no coincide con lo que está en el disco duro, entonces el sistema de archivos genera una excepción y el servidor web devuelve un error 404 No encontrado.

Es realmente esa gente simple. No es ciencia espacial. Existe una relación absoluta entre la porción de ruta / archivo de una URL y el sistema de archivos.

closetnoc
fuente
1
Creo que tu argumento es defectuoso. Si bien Berners-Lee no tenía otra opción sobre la distinción entre mayúsculas y minúsculas de las URL de ftp. Llegó a diseñar URL http. Podría haberlos especificado como US-ASCII solamente y sin distinción entre mayúsculas y minúsculas. Si alguna vez hubo servidores web que acaban de pasar la ruta URL al sistema de archivos, entonces no fueron seguros y la introducción de la codificación URL rompió la compatibilidad con ellos. Dado que la ruta se está procesando antes de pasar al caso de destrucción del sistema operativo, habría sido fácil de implementar. Por lo tanto, creo que tenemos que considerar esto como una decisión de diseño, no una peculiaridad de implementación.
William Hay
@WilliamHay Esto no tiene nada que ver con Berners-Lee o el diseño de la web. Se trata de limitaciones y requisitos del sistema operativo. Soy ingeniero interno de sistemas jubilados. Trabajé en estos sistemas en ese momento. Te digo exactamente por qué las URL distinguen entre mayúsculas y minúsculas. No es una suposición. No es una opinion. Es un hecho. Mi respuesta fue intencionalmente simplificada. Por supuesto, hay verificaciones de archivos y otros procesos que se pueden hacer antes de emitir cualquier declaración abierta. Y sí (!) Los servidores web son parcialmente inseguros hasta el día de hoy como resultado.
closetnoc
¿Si las URL distinguen entre mayúsculas y minúsculas no tiene nada que ver con el diseño de la web? De Verdad? Argumento de la Autoridad seguido de Argumento por Afirmación. Que los servidores web pasen el componente de ruta de una URL más o menos directamente a una llamada abierta es una consecuencia del diseño de las URL, no una causa de ello. Los servidores (o clientes inteligentes en el caso de FTP) podrían haber ocultado la distinción entre mayúsculas y minúsculas de los sistemas de archivos del usuario. Que no lo hagan es una decisión de diseño.
William Hay
@WilliamHay Necesitas reducir la velocidad de la tolva de césped y releer lo que he escrito. Soy un ingeniero de sistemas internos retirado que escribe componentes del sistema operativo, pilas de protocolos y código de enrutador para ARPA-Net, etc. Trabajé con Apache, O'Reilly e IIS internos. Su argumento FTP no retiene el agua ya que al menos los principales servidores FTP siguen siendo sensibles a mayúsculas y minúsculas por la misma razón. En ningún momento dije nada sobre el diseño de URL / URI. En ningún momento dije que los servidores web pasaran valores sin procesamiento. Dije que los servicios del sistema operativo se usan comúnmente y que el sistema de archivos requiere una coincidencia exacta para tener éxito.
closetnoc
@WilliamHay Por favor, comprenda que usted y yo estamos pensando en propósitos cruzados. Todo lo que decía en mi respuesta es que, para algunos sistemas operativos, las llamadas al sistema de archivos distinguen entre mayúsculas y minúsculas por diseño. Las aplicaciones que usan llamadas del sistema, y ​​la mayoría lo hacen, se limitan a la aplicación de las reglas del sistema operativo, en este caso, la distinción entre mayúsculas y minúsculas. No es imposible eludir esta regla. De hecho, esto puede ser algo trivial en algunos casos, aunque no práctico. Solía rutinaria de derivación del sistema de archivos en mi trabajo con los discos duros Descifra que iban Kablooie por una razón u otra, o para analizar bases de datos internas de archivos, etc.
closetnoc
21
  1. Las URL afirman ser un localizador de recursos UNIFORME y pueden apuntar a recursos que son anteriores a la web. Algunos de estos distinguen entre mayúsculas y minúsculas (por ejemplo, muchos servidores ftp) y las URL deben ser capaces de representar estos recursos de una manera razonablemente intuitiva.

  2. La insensibilidad a mayúsculas y minúsculas requiere más trabajo cuando se busca una coincidencia (ya sea en el sistema operativo o por encima).

  3. Si define URL como mayúsculas y minúsculas, los servidores individuales pueden implementarlas como mayúsculas y minúsculas si así lo desean. Lo opuesto no es verdad.

  4. La insensibilidad a mayúsculas y minúsculas puede no ser trivial en contextos internacionales: https://en.wikipedia.org/wiki/Dotted_and_dotless_I . También RFC1738 permitió el uso de caracteres fuera del rango ASCII siempre que estuvieran codificados pero no especificaran un juego de caracteres. Esto es bastante importante para algo que se hace llamar la World Wide Web. La definición de URL como mayúsculas y minúsculas abriría mucho margen para errores.

  5. Si está tratando de empacar muchos datos en un URI (por ejemplo, un URI de datos ) puede empacar más si las mayúsculas y minúsculas son distintas.

William Hay
fuente
1
Estoy bastante seguro de que las URL se limitaron históricamente a ASCII. Por lo tanto, es poco probable que la internacionalización sea una razón original. La historia de Unix que distingue entre mayúsculas y minúsculas, OTOH, probablemente jugó un papel muy importante.
derobert
Si bien solo se puede usar un subconjunto de ASCII sin codificar en una URL, RFC1738 especifica que los caracteres fuera del rango ASCII se pueden usar codificados. Sin especificar un juego de caracteres, no es posible saber qué octetos representan el mismo carácter, excepto por mayúsculas y minúsculas. Actualizado.
William Hay
1
Re # 4: En realidad es peor que eso. Con puntos y sin puntos, soy una demostración del principio más general de que, incluso si todo es UTF-8 (o algún otro UTF), no puede utilizar mayúsculas o minúsculas correctamente sin conocer la configuración regional a la que pertenece el texto. En la configuración regional predeterminada, una letra latina mayúscula I minúscula a una letra latina minúscula i, que está mal en turco porque agrega un punto (no hay un punto de código "turco mayúscula sin punto I"; debe usar el código ASCII punto). Agregue diferencias de codificación, y esto va de "realmente difícil" a "completamente intratable".
Kevin
5

Robé del blog una Cosa nueva y vieja el hábito de abordar preguntas de la forma "¿por qué es que algo es así?" con la contrapregunta "¿cómo sería el mundo si no fuera el caso?"

Digamos que configuré un servidor web para servir mis archivos de documentos desde una carpeta para poder leerlos en el teléfono cuando estaba fuera de la oficina. Ahora, en mi carpeta de documentos, tengo tres archivos, todo.txt, ToDo.txty TODO.TXT(lo sé, pero tenía sentido para mí cuando hice los archivos).

¿Qué URL me gustaría poder usar para acceder a estos archivos? Me gustaría acceder a ellos de forma intuitiva, utilizando http://www.example.com/docs/filename.

Digamos que tengo un script que me permite agregar un contacto a mi libreta de direcciones, lo que también puedo hacer en la web. ¿Cómo debería eso tomar sus parámetros? Bueno, me gustaría usarlo como: http://www.example.com/addcontact.php?name=Tom McHenry von der O'Reilly. Pero si no hubiera forma de especificar el nombre por caso, ¿cómo lo haría?

¿Cómo diferenciaría las páginas wiki para Cat y CAT, Text y TEXT, latex y LaTeX? Disambig páginas, supongo, pero prefiero simplemente obtener lo que pedí.

Pero todo eso parece que está respondiendo la pregunta incorrecta, de todos modos.

La pregunta que creo que realmente estaba preguntando es "¿Por qué los servidores web 404 solo hacen una diferencia de caso, cuando son computadoras, diseñadas para simplificar la vida, y son perfectamente capaces de encontrar al menos las variaciones de casos más obvias en el ¿URL que escribí que funcionaría? "

La respuesta a esto es que, si bien algunos sitios han hecho esto (y mejor, también buscan otros errores tipográficos), nadie pensó que valiera la pena cambiar la página de error 404 predeterminada de un servidor web para hacer eso ... ¿pero tal vez deberían hacerlo?

Dewi Morgan
fuente
1
Algunos sitios utilizan algún tipo de mecanismo para convertir cualquier consulta a minúsculas o algo coherente. En cierto modo, esto es inteligente.
closetnoc
No, no deberían. Esta funcionalidad se puede agregar, y a menudo se agrega cuando es deseable (por ejemplo, mediante módulos en apache). Imponer este tipo de cambio como comportamiento predeterminado, o peor, comportamiento inmutable, sería más perjudicial que el relativamente raro. ocasión en la que alguien tiene que escribir manualmente una URL más allá del nombre del host. Para un buen ejemplo de por qué no hacer esto, recuerde el fiasco cuando Network Solutions "solucionó" errores de dominio inexistentes de consultas DNS públicas.
SirNickity
@SirNickity Nadie estaba proponiendo la inmutabilidad en ningún nivel y las páginas de error del servidor web son configurables en cada servidor web que he usado; nadie estaba sugiriendo reemplazar 404 con códigos de 30 *, sino agregar una lista de enlaces de sugerencias que se pueden hacer clic en humanos a la página de error; los nombres de dominio son un tema y un problema muy diferentes, sin distinción entre mayúsculas y minúsculas, y en un contexto de seguridad diferente; e IIS ya "corrige" automáticamente (al ignorar) las diferencias entre mayúsculas y minúsculas en la ruta o las partes del nombre de archivo de los URI.
Dewi Morgan
Desde 1996, Apache le ha permitido hacer esto con mod_speling . Simplemente no parece ser algo muy popular. Las personas de Unix / Linux ven la insensibilidad a mayúsculas y minúsculas como la regla, la insensibilidad a mayúsculas y minúsculas como la excepción.
reinierpost
4

Aunque la respuesta anterior es correcta y buena. Me gustaría agregar algunos puntos más.

Para comprender mejor, uno debe entender la diferencia básica entre el servidor Unix (Linux) Vs Windows. Unix distingue entre mayúsculas y minúsculas y Windows es un sistema operativo no sensible a mayúsculas y minúsculas

El protocolo HTTP se desarrolló o comenzó a implementarse alrededor de 1990. El protocolo HTTP fue diseñado por ingenieros que trabajan en los institutos CERN, la mayoría de esos días los científicos usaban máquinas Unix y no Windows.

La mayoría de los científicos estaban familiarizados con Unix, por lo que podrían haber sido influenciados con el sistema de archivos de estilo Unix.

El servidor de Windows se lanzó después de 2000. mucho antes de que el servidor de Windows se popularizara, el protocolo HTTP estaba bien madurado y la especificación estaba completa.

Esta podría ser la razón.

Mani
fuente
2
"El servidor de Windows se lanzó después de 2000." El equipo de Windows NT 3.1 no hubiera estado de acuerdo con usted en 1993. NT 3.51 en 1995 fue probablemente cuando NT comenzó a madurar y lo suficientemente bien establecido como para admitir aplicaciones de servidor críticas para el negocio.
un CVn
NT 3.51 tenía la interfaz Win 3.1. Windows no despegó realmente hasta Windows 95 y tomó NT 4.0 para obtener la misma interfaz.
Thorbjørn Ravn Andersen
Michael Kjörling, estuvo de acuerdo. Déjame modificarlo.
Mani
1
@ ThorbjørnRavnAndersen En el mercado de servidores, NT 3.51 tuvo un éxito razonable. En el mercado de consumidores / prosumidores, tardó hasta Windows 2000 (NT 5.0) antes de que la línea NT comenzara a ganar una gran tracción.
un CVn
De hecho, WorldWideWeb se desarrolló inicialmente en sistemas basados ​​en Unix, que tienen sistemas de archivos sensibles a mayúsculas y minúsculas, y la mayoría de las URL se asignan directamente a archivos en el sistema de archivos.
reinierpost
4

¿Cómo se debe leer un "por qué fue diseñado de esta manera?" ¿pregunta? ¿Está pidiendo una descripción históricamente precisa del proceso de toma de decisiones, o se pregunta "por qué alguien lo diseñaría de esta manera"?

Rara vez es posible obtener una cuenta históricamente precisa. A veces, cuando las decisiones se toman en los comités de normas, hay un rastro documental de cómo se llevó a cabo el debate, pero en los primeros días de la web, algunas personas tomaron decisiones apresuradamente, en este caso probablemente el propio TimBL, y la justificación es poco probable. haber sido escrito Pero TimBL ha admitido que cometió errores en el diseño de las URL: consulte http://www.dailymail.co.uk/sciencetech/article-1220286/Sir-Tim-Berners-Lee-admits-forward-slashes-web-address -mistake.html

En los primeros días, las URL se asignaban muy directamente a los nombres de archivo, y los archivos generalmente estaban en máquinas similares a Unix, y las máquinas similares a Unix tienen nombres de archivo sensibles a mayúsculas y minúsculas. Entonces, supongo que sucedió de esa manera por conveniencia de implementación, y la usabilidad (para usuarios finales) nunca fue considerada. De nuevo, en los primeros días los usuarios eran todos programadores de Unix de todos modos.

Michael Kay
fuente
Los usuarios finales también eran usuarios de Unix (no necesariamente programadores, sino físicos de alta energía y similares), por lo que también estaban acostumbrados a la insensibilidad a las mayúsculas y minúsculas.
reinierpost
3

Esto no tiene nada que ver con el lugar donde compró su dominio, DNS no distingue entre mayúsculas y minúsculas. Pero, el sistema de archivos en el servidor que está utilizando para el alojamiento es.

Esto no es realmente un problema y es bastante común en los hosts * nix. Solo asegúrese de que todos los enlaces que escriba en sus páginas sean correctos y de que no tenga ningún problema. Para que sea más fácil, recomiendo nombrar siempre sus páginas en minúsculas y nunca necesitará verificar el nombre al escribir un enlace.

adnan3344
fuente
2

Closetnoc tiene razón sobre el sistema operativo. Algunos sistemas de archivos tratan el mismo nombre con una carcasa diferente como archivos diferentes.

Además, ¿existe un propósito / ventaja real de tener una URL que distinga entre mayúsculas y minúsculas (a diferencia de la gran mayoría de las URL que apuntan a la misma página sin importar las mayúsculas)?

Si. para evitar problemas de contenido duplicado.

Si tuviera, por ejemplo, las siguientes URL:

http://example.com/page-1
http://example.com/Page-1
http://example.com/paGe-1
http://example.com/PAGE-1
http://example.com/pAGE-1

y todos señalaron exactamente la misma página con exactamente el mismo contenido, entonces tendrías contenido duplicado, y estoy seguro de que si tienes una cuenta de la consola de búsqueda de Google (herramientas para webmasters), Google te lo indicará.

Lo que sugeriría hacer si se encuentra en esa situación es usar todas las URL en minúsculas, luego redirigir las URL con al menos una letra mayúscula a la versión en minúsculas. Entonces, en la lista de URL anteriores, redirija todas las URL a la primera URL.

Miguel
fuente
"Sí. Para evitar problemas de contenido duplicado". - Pero lo contrario parece ser cierto? El hecho de que las URL puedan distinguir entre mayúsculas y minúsculas (y así es como las tratan los motores de búsqueda) provoca los problemas de contenido duplicado que usted menciona. Si las URL fueran universalmente insensibles a mayúsculas y minúsculas, entonces no habría problemas de contenido duplicado con mayúsculas y minúsculas diferentes. page-1sería lo mismo que PAGE-1.
MrWhite
Creo que una configuración de servidor deficiente es lo que puede causar contenido duplicado cuando se trata de la carcasa. Por ejemplo, la declaración RewriteRule ^request-uri$ /targetscript.php [NC]almacenada en .htaccess coincidiría http://example.com/request-uriy http://example.com/ReQuEsT-Uriporque [NC]indica que la carcasa no importa al evaluar esa expresión regular.
Mike
1

La sensibilidad a mayúsculas y minúsculas tiene valor.

Si hay 26 letras, cada una de ellas con la capacidad de mayúsculas, son 52 caracteres.

4 caracteres tienen la posibilidad de 52 * 52 * 52 * 52 combinaciones, lo que equivale a 7311616 combinaciones.

Si no puede poner en mayúscula los caracteres, la cantidad de combinaciones es 26 * 26 * 26 * 26 = 456976

Son más de 14 veces más combinaciones para 52 caracteres que 26. Por lo tanto, para almacenar datos, las URL pueden ser más cortas y se puede pasar más información a través de redes con menos datos transferidos.

Es por eso que ves YouTube usando URL como https://www.youtube.com/watch?v=xXxxXxxX

Michael d
fuente