Por que o URL não diferencia maiúsculas de minúsculas?
Entendo que isso possa parecer uma pergunta retórica provocativa (e "advogada do diabo"), mas acho útil considerar. O design do HTTP é que um "cliente", que geralmente chamamos de "navegador da web", solicita dados ao "servidor da web".
Existem muitos servidores web diferentes que são lançados. A Microsoft lançou o IIS com sistemas operacionais Windows Server (e outros, incluindo o Windows XP Professional). O Unix tem pesos pesados como nginx e Apache, para não mencionar ofertas menores como o httpd interno do OpenBSD, ou thttpd ou lighttpd. Além disso, muitos dispositivos com capacidade de rede construíram servidores Web que podem ser usados para configurá-lo, incluindo dispositivos com finalidades específicas para redes, como roteadores (incluindo muitos pontos de acesso Wi-Fi e modems DSL) e outros dispositivos, como impressoras ou No-breaks (unidades de fonte de alimentação ininterruptas com bateria) que podem ter conectividade de rede.
Portanto, a pergunta "Por que as URLs diferenciam maiúsculas de minúsculas?" Está perguntando: "Por que os servidores da Web tratam a URL como diferenciando maiúsculas de minúsculas?" E a resposta real é: nem todos fazem isso. Pelo menos um servidor web, bastante popular, normalmente NÃO diferencia maiúsculas de minúsculas. (O servidor web é IIS.)
Uma das principais razões para um comportamento diferente entre diferentes servidores da Web provavelmente se resume a uma questão de simplicidade. A maneira simples de criar um servidor da Web é fazer as coisas da mesma maneira como o sistema operacional do computador / dispositivo localiza arquivos. Muitas vezes, os servidores da web localizam um arquivo para fornecer uma resposta. O Unix foi projetado em computadores de última geração e, portanto, o Unix forneceu a funcionalidade desejável de permitir letras maiúsculas e minúsculas. O Unix decidiu tratar maiúsculas e minúsculas como diferentes porque, bem, elas são diferentes. Essa é a coisa simples e natural a se fazer. O Windows tem um histórico de distinção entre maiúsculas e minúsculas devido ao desejo de oferecer suporte a software já criado, e esse histórico remonta ao DOS, que simplesmente não suportava letras minúsculas, possivelmente em um esforço para simplificar as coisas com computadores menos potentes que usavam menos memória. Como esses sistemas operacionais são diferentes, o resultado é que os servidores da Web com design simples (versões anteriores) refletem as mesmas diferenças.
Agora, com todo esse pano de fundo, aqui estão algumas respostas específicas para as perguntas específicas:
Quando os URLs foram projetados, por que a diferenciação entre maiúsculas e minúsculas se tornou um recurso?
Por que não? Se todos os servidores da Web padrão não fizessem distinção entre maiúsculas e minúsculas, isso indicaria que os servidores da Web estavam seguindo um conjunto de regras especificado pelo padrão. Simplesmente não havia uma regra que afirma que esse caso precisa ser ignorado. A razão de não existir uma regra é simplesmente a inexistência de uma regra. Por que se preocupar em criar regras desnecessárias?
Eu pergunto isso porque me parece (ou seja, um leigo) que a distinção entre maiúsculas e minúsculas seria preferida para evitar erros desnecessários e simplificar uma sequência de texto já complicada.
URLs foram projetados para máquinas processarem. Embora uma pessoa possa digitar um URL completo em uma barra de endereço, essa não foi uma parte importante do design pretendido. O design pretendido é que as pessoas sigam ("clique em") hiperlinks. Se leigos comuns estão fazendo isso, eles realmente não se importam se o URL invisível é simples ou complicado.
Além disso, existe um verdadeiro objetivo / vantagem em ter um URL com distinção entre maiúsculas e minúsculas (em oposição à grande maioria dos URLs que apontam para a mesma página, independentemente da capitalização)?
O quinto ponto numerado da resposta de William Hay menciona uma vantagem técnica: os URLs podem ser uma maneira eficaz de um navegador da Web enviar um pouco de informações para um servidor da Web, e mais informações podem ser incluídas se houver menos restrições, portanto, a distinção entre maiúsculas e minúsculas restrição reduziria quanta informação pode ser incluída.
No entanto, em muitos casos, não há um benefício super atraente para a distinção entre maiúsculas e minúsculas, o que é comprovado pelo fato de que o IIS normalmente não se incomoda com isso.
Em resumo, o motivo mais convincente é provavelmente a simplicidade para quem projetou o software de servidor da web, particularmente em uma plataforma que diferencia maiúsculas de minúsculas como o Unix. (O HTTP não foi algo que influenciou o design original do Unix, pois o Unix é notavelmente mais antigo que o HTTP.)