我注意到

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK

and

http://stackoverflow.com/questions/ask

两者都可以工作-实际上前一个转换为小写字母。

我认为这对用户来说是有意义的。

如果我看谷歌,那么这个URL工作正常:

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

但是这个带ABOUT的不能用:

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

URL是否应该区分大小写?


当前回答

对于托管在Linux服务器上的网站,URL是区分大小写的。 http://www.google.com/about和http://www.google.com/About将被重定向到不同的位置。而在Windows服务器中,URL是不区分大小写的,就像命名文件夹一样,将被重定向到相同的位置。

其他回答

为了可读性,所有“不敏感”都加粗。

根据RFC 4343,域名不区分大小写。URL的其余部分通过GET方法发送到服务器。这可能区分大小写。

以这个页面为例,stackoverflow.com接收GET字符串/questions/7996919/should-url-be-大小写敏感,向浏览器发送HTML文档。Stackoverflow.com是大小写不敏感的,因为它为/QUEStions/7996919/ should -url-be大小写敏感生成了相同的结果。

另一方面,维基百科是区分大小写的,除了标题的第一个字符。url https://en.wikipedia.org/wiki/Case_sensitivity和https://en.wikipedia.org/wiki/case_sensitivity指向同一篇文章,但https://en.wikipedia.org/wiki/CASE_SENSITIVITY返回404。

一般来说,url的大小写敏感性(以及它们在不同大小写下是否相同)需要从以下角度来看待:

资源等效 URL的比较

从资源等价的角度来看,通常不可能说两个url在任何情况下都不同(小写,大写,句子大小写,驼峰大小写……)大小写的任何组合)彼此不同,除非资源是从两个url中检索的,这在许多情况下是不现实的(RFC 3986, section 6.1, para 1)。因此,当资源不能检索时,使用比较透视图。

然而,在可以检索资源的情况下,问题会变得更加复杂(正如预期的那样)。根据RFC 3986第3.3节第5段的规定,如下所强调的

除了层次路径中的点段之外,路径段是 泛型语法认为是不透明的

似乎不能从通用语法(包括敏感性问题)对URI/URL的方案和权限以外的其他部分做出任何假设。

然而,对于授权的方案和主机部分,规范(仁慈地)规定它们是不区分大小写的。请参阅RFC 3986第3.1节第1段和RFC 3986第6.2.2.1节第2段。

在穷尽了这条查询线之后,应该查看比较透视图,以确定URI/ url是否区分大小写。

对这个方向的第一个提示是通过阅读6.2.2.1节(上面)

另一个泛型语法 除非特别说明,否则假定组件是区分大小写的 由方案另行定义

RFC 2616第3.2.3节进一步支持了这一点

当比较两个uri以决定它们是否匹配时,客户机 是否应该使用区分大小写的八个字节对整个代码进行比较 uri

然后,最后,查询是否已解决,url是否区分大小写…(嘿!),不完全是,关键的词是“opaque”,“client”和“comparison”。

除了它的语法之外,上面的RFC没有提到任何关于路径和查询的实际解释,除了它是“不透明的”,它只指定了“客户端”如何(使用SHOULD而不是MUST)“比较”URL。它没有提到服务器(应该,更不用说必须)如何在方案/权限之外解释URL的其余部分。

因此,服务器有所有的纬度来解释一个URL,因为他们所做的是由其他人之前的帖子突出显示的。

请看这里的规格: 2.7.3节 https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-p1-messaging-25#page-19

scheme和host不区分大小写,通常以小写形式提供;所有其他组件以区分大小写的方式进行比较 的方式。

RFC 3986第6.2.2.1节说:“scheme和host不区分大小写,因此应该规范化为小写。例如,URI HTTP://www.EXAMPLE.com/等价于http://www.example.com/。假定其他通用语法组件是区分大小写的,除非该方案另有特别定义”。

服务器可以在内部规范化传递的URI,并为不同大小写的URI (/about/和/about/)提供相同的资源,使URI对用户来说不区分大小写。

url应该不区分大小写,除非有很好的理由说明它们不应该区分大小写。

这不是强制性的(它不是RFC的任何一部分),但它使url的通信和存储更加可靠。

如果我在网站上有两页:

http://stackoverflow.com/ABOUT.html

and

http://stackoverflow.com/about.html

它们有何不同?也许有人写的是“大喊风格”(大写)——但从IA的角度来看,这种区别永远不应该通过URL的变化来区分。

此外,在Apache中很容易实现这一点-只需从mod_spelling使用CheckSpelling On。