URL是否区分大小写?

我注意到了

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK 

 http://stackoverflow.com/questions/ask 

两个工作正常 – 其实前一个被转换为小写。

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

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

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

但这个与“关于”不起作用:

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

该url是否应区分大小写?

根据W3的“ HTML和URL ”,他们应该:

可能存在URL或部分URL,这些情况无关紧要,但识别这些可能并不容易。 用户应始终认为URL是区分大小写的。

所有“ 不敏感 ”的字体为了可读性而加粗。

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

以此页面为例,stackoverflow.com接收GETstring/ questions / 7996919 / should-url-be-case-sensitive ,将HTML文档发送到您的浏览器。 不区分大小写,因为它产生相同的结果/ QUESTIONS / 7996919 /应该-URL-大小写敏感 。

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

取决于主机操作系统。 在Windows上托pipe的站点往往不区分大小写,因为底层文件系统不区分大小写。 在Unixtypes系统上托pipe的站点往往是区分大小写的,因为它们的底层文件系统通常区分大小写。 URL的主机名部分始终不区分大小写,这是path的其余部分会有所不同。

URL的域名部分不区分大小写,因为DNS忽略大小写: http://en.example.org/ : HTTP://EN.EXAMPLE.ORG/HTTP://EN.EXAMPLE.ORG/都打开同一页面。

该path用于指定并可能find请求的资源。 这是区分大小写的,尽pipe某些服务器可能会将其视为不区分大小写,特别是那些基于Microsoft Windows的服务器。

如果服务器是区分大小写的,并且http://en.example.org/wiki/URL是正确的,那么http://en.example.org/WIKI/URLhttp://en.example.org/wiki/url将显示一个HTTP 404错误页面,除非这些URL指向有效的资源本身。

我不是一个冲击旧文章的粉丝,但是因为这是对这个特定问题的第一个反应之一,我觉得有必要澄清一些事情。

正如@Bhavin Shah回答说的那样,url的域部分是不区分大小写的

 http://google.com 

 http://GOOGLE.COM 

 http://GoOgLe.CoM 

都是一样的,但是域名部分之后的所有内容都被认为是区分大小写的。

所以…

 http://GOOGLE.COM/ABOUT 

 http://GOOGLE.COM/about 

是不同的。

注意:在很多情况下,我说的是“技术上”而不是“字面上的”,实际上,大多数情况下,服务器设置为处理这些项目的方式相同,但是可以设置它们,以便处理不一样。

不同的服务器处理这个不同,在某些情况下,他们必须区分大小写。 在许多情况下,查询string值都被编码(例如,作为查询string值传递的Session ID或Base64编码数据)。这些项目的性质区分大小写,因此服务器在处理它们时必须区分大小写。

因此,要回答这个问题,“应该”服务器在获取这些数据时是区分大小写的,答案是“是的,绝对的”。

当然,并不是所有的东西都需要区分大小写,但服务器应该知道这是什么以及如何处理这些情况。


哈哈·辛哈的评论基本上也是这样说的。 我在发布之前错过了,所以我想在信用到期的时候给予信用。

看看这里的规范:第2.7.3节http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-25#page-19

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

除非有充分的理由,否则url应不区分大小写。

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

如果我在网站上有两个网页:

 http://stackoverflow.com/ABOUT.html 

 http://stackoverflow.com/about.html 

他们应该如何区别? 也许有人写的是“大喊大叫”(大写) – 但是从IA的观点来看,这种区别决不应该通过URL的变化来实现。

而且,在Apache中实现这一点很容易 – 只需从mod_Speling使用CheckSpelling On即可。

老问题,但我在这里偶然发现,所以为什么不试一试,因为这个问题是寻求各种不同的观点,而不是一个明确的答案。

W3C可能会提出build议 – 我非常关心 – 但是想重新思考,因为问题在这里。

w3c为什么认为域名是不区分大小写的,之后会不区分大小写?

我在想,其基本原理是URL的域部分是由用户手动input的。 超文本之后的所有内容将由机器(浏览器和服务器在后面)解决。

机器可以比人类处理大小写不敏感(不是技术类:))。

但是问题只是因为机器可以处理这样的事情吗?

我的意思是命名和访问位于hereIsTheResource vs hereistheresource的资源有什么好处?

侧面是比骆驼更容易阅读的一个更可读。 对人类可读(包括技术类)。

所以这里是我的观点:

资源path有时候落在编程结构中间的某个地方,并且接近浏览器后面的最终用户。

您的url(不包括域名)应该是不区分大小写的,如果您的用户需要触摸它或键入它等等。您应该开发您的应用程序到AVOID让用户尽可能键入path。

您的url(不包括域名)应该区分大小写,如果您的用户永远不会手动input。

结论

path应该区分大小写。 我的观点正在重点关注区分大小写的path。

URL字符被转换为hex代码(如果您注意到URL中的空格显示为%20等),并且由于小写字母和大写字母具有不同的hex值,所以URL最明显区分大小写。 然而,这个问题的精神似乎应该是标准,我说不,但他们是。 如果开发者/提供者希望它能够工作,而不pipe最终用户如何,那么它的开发者/提供者可以在他们的代码中对此进行解释

我认为这个以及围绕spec或者没有说的许多答案都没有提到这个问题的关键。 他们是否应该区分大小写? 这确实是一个加载的问题。 从用户的angular度来看,大小写敏感是一个痛点,并不是所有的知识都有所作为。 URI是否应该取决于问题的背景。 对于技术上的灵活性,是的,他们应该是。 为了可用性,不,他们不应该。

问题是该url是否区分大小写?

我认为没有用,或大小写敏感的URL后面的好做法。 它愚蠢,它吸,应该避免在任何时候。

只是为了支持我的意见,当有人问什么url,你怎么能解释什么字符的URL是大写还是小写? 这是无稽之谈,应该从来没有人告诉过你。

对于在Linux服务器上托pipe的网站,URL区分大小写。 http://www.google.com/about和http://www.google.com/About将被redirect到不同的位置。; 而在Windows服务器中,URL不区分大小写,因为在命名FOLDER时将被redirect到相同的位置。

可以制作不区分大小写的url

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

使Google.com..GOOGLE.com等直接到google.com