URL应该区分大小写吗?

Ima*_*ree 277 url case-sensitive

我注意到了

HTTP://STACKOVERFLOW.COM/QUESTIONS/ASK
Run Code Online (Sandbox Code Playgroud)

http://stackoverflow.com/questions/ask
Run Code Online (Sandbox Code Playgroud)

两者都工作正常 - 实际上前一个转换为小写.

我认为这对用户来说很有意义.

如果我查看Google,那么此网址可以正常使用:

http://www.google.com/intl/en/about/corporate/index.html  
Run Code Online (Sandbox Code Playgroud)

但这个"关于"的人不起作用:

http://www.google.com/intl/en/ABOUT/corporate/index.html   
Run Code Online (Sandbox Code Playgroud)

URL应该区分大小写吗?

jld*_*ont 268

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

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

  • 我想"在你所接受的内容中保持自由,在发送内容时要保守"(IETF发言)将是我的指导方针. (91认同)
  • W3表示USERS应该假设服务器区分大小写,但不建议服务器. (36认同)
  • W3指南是合理的.它只是说明不应该假设服务器如何处理您提交的URL.由服务器决定如何处理请求URL.大多数Web服务器都是unix/linux,这意味着大多数Web服务器都区分大小写. (9认同)
  • _为了弹性,解释URL的程序应该将大写字母视为与方案名称中的小写字母等效(例如,允许"HTTP"以及"http").[来源](http://www.faqs.org/rfcs /rfc1738.html) (3认同)
  • @PK_请注意,这仅适用于URL的_scheme_部分.RFC1738不讨论URL的其他部分是否应该被解释为区分大小写. (3认同)

jdh*_*dh8 122

所有" 不敏感 "都是加粗的以便于阅读.

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

以此页面为例,stackoverflow.com 收到 GET字符串/ questions/7996919/should-url-case-sensitive-sensitive,将HTML文档发送到您的浏览器.Stackoverflow.com 不区分大小写,因为它对/ QUEStions/7996919/Should-url-case-sensitive敏感产生相同的结果.

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

  • 这是因为stackoverflow中问题URL的语义可读部分无法识别它,它由`7996919`标识.URL的语义部分就是用于搜索引擎优化的目的. (13认同)
  • 在用户可能认为单词应该是一个或另一个单词的情况下,维基百科对于区分大小写实际上是非常宽容的,但这更多是因为强迫症...对不起,编辑的体贴本质.但它的URL在技术上区分大小写. (7认同)
  • 实际上也是[/sf/ask/559784361/BLABLA-be-or-NOT-to-be](/sf/ask/559784361/BLABLA-be-or-不可能)有效.这是因为stackoverflow.com的服务器仅使用问题的ID来识别它并返回正确的URL和HTML页面. (4认同)

Jim*_*utt 70

取决于托管操作系统.由于底层文件系统不区分大小写,因此Windows上托管的站点往往不区分大小写.Unix类型系统上托管的站点往往区分大小写,因为它们的底层文件系统通常区分大小写.URL的主机名部分始终不区分大小写,它是路径的其余部分.


Bha*_*hah 31

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

该路径用于指定并可能找到所请求的资源.它区分大小写,但某些服务器可能会将其视为不区分大小写,特别是基于Microsoft Windows的服务器.

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

  • 这个答案有唯一正确的措辞"它是区分大小写的,尽管它可能被视为不区分大小写".只有有效的答案. (3认同)
  • @garnet来自[RFC3986 6.2.2.1。大小写规范化](https://tools.ietf.org/html/rfc3986#section-7.5):*当URI使用通用语法的组件时,组件语法等效规则始终适用;也就是说,方案和主机不区分大小写,因此应规范化为小写。例如,URI“ HTTP://www.EXAMPLE.com/”等效于“ http://www.example.com/”。**除非该方案另行明确定义,否则其他通用语法组件均假定为区分大小写**。” * (2认同)
  • @garnet并从[HTTP RFC](https://tools.ietf.org/html/rfc2616):“ *比较两个URI以确定它们是否匹配时,客户端应使用区分大小写的八位字节整个URI的八位字节比较[...] *“(方案和主机本身除外)。 (2认同)

Ken*_*rza 15

我不喜欢碰到旧文章,但因为这是对这一特定问题的第一批回应之一,我觉得有必要澄清一些事情.

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

http://google.com 
Run Code Online (Sandbox Code Playgroud)

http://GOOGLE.COM 
Run Code Online (Sandbox Code Playgroud)

http://GoOgLe.CoM 
Run Code Online (Sandbox Code Playgroud)

是完全相同的,但域名部分之后的所有内容都被视为区分大小写.

所以...

http://GOOGLE.COM/ABOUT
Run Code Online (Sandbox Code Playgroud)

http://GOOGLE.COM/about
Run Code Online (Sandbox Code Playgroud)

是不同的.

注意:我说的是"技术上"而不是"字面上"在很多情况下,大多数情况下,服务器设置为处理这些项目相同,但是可以设置它们以便它们不会被处理相同.

不同的服务器处理不同的方式,在某些情况下,它们必须区分大小写.在许多情况下,查询字符串值是经过编码的(例如作为查询字符串值传递的Session Ids或Base64编码数据)这些项目的性质区分大小写,因此服务器在处理它们时必须区分大小写.

因此,为了回答这个问题,"应该"服务器在获取这些数据时会区分大小写,答案是"是的,绝对是".

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


@Hart Simha的评论基本上也说了同样的话.在我发布之前我错过了,所以我想在信用到期时给予信用.


Myk*_*vik 8

RFC 3986 的第 6.2.2.1 节说“ scheme 和 host 不区分大小写,因此应规范化为小写。例如,URIHTTP://www.EXAMPLE.com/相当于http://www.example.com/。除非另有明确定义,否则假定其他通用语法组件区分大小写。通过该计划”。

服务器可能会在内部对传递的 URI 进行规范化,并为不同大小写 (/about//ABOUT/) 的 URI 提供相同的资源,从而使 URI 对用户来说显得不区分大小写。


小智 6

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

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