比较两个URI以确定它们是否匹配时,客户端为 应该使用一个区分大小写的八位字节对比整个
URI,但有以下例外:
我在上面阅读Http Rfc中的句子我认为Url不区分大小写,但我不会动摇,这意味着什么 ?
答案 0 :(得分:23)
RFC 3986州:
方案和主机不区分大小写,因此应该标准化为小写。例如,URI
<HTTP://www.EXAMPLE.com/>
相当于<http://www.example.com/>
。 除非方案另有明确定义,否则假定其他通用语法组件区分大小写
RFC 2616为HTTP
方案定义了以下比较规则:
在比较两个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等))则不然。