URI是否不区分大小写?

时间:2013-03-26 16:00:29

标签: http protocols specifications rfc2616

  

比较两个URI以确定它们是否匹配时,客户端为   应该使用一个区分大小写的八位字节对比整个
  URI,但有以下例外:

我在上面阅读Http Rfc中的句子我认为Url不区分大小写,但我不会动摇,这意味着什么 ?

6 个答案:

答案 0 :(得分:23)

RFC 3986州:

  

方案和主机不区分大小写,因此应该标准化为小写。例如,URI <HTTP://www.EXAMPLE.com/>相当于<http://www.example.com/>除非方案另有明确定义,否则假定其他通用语法组件区分大小写

RFC 2616HTTP方案定义了以下比较规则:

  

在比较两个URI以确定它们是否匹配时,客户端应该使用区分大小写的八位字节比较整个URI ,但有以下例外情况:

但是,RFC 7230通过声明:

进一步锁定它
  

方案和主机不区分大小写,通常以小写字母提供; 以区分大小写的方式比较所有其他组件。

这些规则通常适用于客户端比较。没有专门针对服务器端比较的规则。一旦服务器将URI分解为其组件,它应该根据相同的规则对待它们,但我不会在RFC中看到强制执行。某些Web服务器(如Apache)确实遵循这些规则。 IIS没有与Windows&#39;的兼容性。不区分大小写的文件系统。

答案 1 :(得分:12)

实际上它取决于网络服务器。

IIS不区分大小写。

Apache是​​。

我怀疑关于IIS的决定源于Windows文件系统不区分大小写的事实。

IIS仍然符合规范的这一部分,因为SHOULD是推荐,而不是要求。

答案 2 :(得分:8)

URI的主机部分不区分大小写:

http://stackoverflow.com
http://StackOverflow.com

以上任何一种都会带你到这个网站。

主机部分之后的其余URI可以区分大小写。这取决于服务器。

答案 3 :(得分:2)

是否将URL视为区分大小写也取决于Web服务器。例如,Microsoft IIS服务器将URL视为区分大小写。

以下URL(托管在Microsoft IIS服务器上)都被视为等效:

但是,Apache服务器执行将URL视为区分大小写,被归类为两种不同的资源:

从技术上讲,Apache在这里正确地遵循这些标准,而且微软违反了规范......哦 - 好吧 - “旧习惯很难,”他们说!

答案 4 :(得分:2)

正如Remy Lebeau在回答中提到的那样,规则是为客户端设定的。实际上,这意味着客户端软件不应该尝试对URI的所有部分进行任意的大小写修改,除了特别声明的部分。所以,当浏览器例如看到页面锚点中的相对URL,在检查它是否已缓存在其缓存中之前,不应将其转换为小写;它也不应该使用小写的URI发布到服务器。此外,它不应该决定两个不同的URI只是指向同一个资源(因此可能错误地跳过事务并返回缓存的结果)。

这意味着客户端不应该假设服务器如何处理URI。它确实需要服务器来处理某些部分不区分大小写的部分:例如,方案和主机。但除此之外,由服务器决定两个不同的URI是否指向相同的资源。在这方面,标准没有对服务器施加任何限制,没有任何服务器应该&#34;服务器应该&#34;或者&#34;服务器不应该&#34;除了直接规定。如果服务器决定其URI不区分大小写,那就绝对没问题。如果它们区分大小写,那也没关系。

答案 5 :(得分:1)

对于基于文件的URI,区分大小写更多地取决于基础文件系统,而不是Web服务器。 Apache会很高兴地在Windows(FAT,NTFS)和mac(HFS)上为index.html返回INDEX.html,但对于区分大小写的文件系统(例如Linux中常用的文件系统(extx等))则不然。