假设我有一个这样的url:
http://www.example.com?key=123&KEY=198
那么
的结果是什么?request.querystring("key")
and
request.querystring("KEY")
我有点糊涂了
uri的RFC规定:
6.2.2.1。案例正常化
当URI使用泛型语法的组件时,组件语法等价规则总是适用;也就是说,模式和主机是不区分大小写的,因此应该规范化为小写。例如,URI HTTP://www.EXAMPLE.com/相当于http://www.example.com/。
假定其他泛型语法组件是区分大小写的,除非方案另有明确定义(参见6.2.3节)。
注意方案("http"在这里,主机(服务器名)是不区分大小写的,但无论如何都应该是小写的。其余部分是区分大小写的,除非您使用不同的方案明确表示它应该不敏感。
所以根据规范,key和key在所有基于http的uri中都是不同的东西。
编辑:@Nicholas假设权威机构定义了它接受的内容,这在一定程度上是错误的,对于自定义方案和定义自己的uri的权威机构来说是正确的,但是http是一个定义良好的规范,每个人都遵守(或者您可以使用管道字符作为分隔符的http查询)。想象一下那里的混乱!)
HTTP的RFC规范说:
scheme和host不区分大小写,通常在小写;所有其他组件以区分大小写的方式进行比较的方式。"保留"字符以外的字符;集中等价于它们的百分比编码的八位元组:标准形式是to不编码(参见[RFC3986]的2.1和2.2节)。
因此,HTTP模式规范定义的URI的查询部分是区分大小写的。如果Microsoft对查询字符串有一个不区分大小写的解析器,那么它就不符合规范。我认为这种级别的挑剔并不是真的很重要。
@gbjbaanb的回答是不正确的:rfc只指定了查询字符串允许的字符集。与URI的路径和片段组件一样,查询 URI组件仅对提供资源的权限具有意义。 这个东西是否区分大小写完全取决于权威。 在c#和IIS的情况下, 由于该类提供的其他构造函数允许提供不同的相等比较器,因此绝对没有什么可以阻止实现使其区分大小写。 此外,由于页面本身(和客户端javascript)可以访问原始URI,因此他们可以自由地对它做任何他们想做的事情。 如果查询字符串是作为HTML表单提交的结果构建的,则键(名称)来自表单控件 因此,在一天结束时,您必须知道请求处理程序在您的查询字符串中期望什么。它可能(也可能不)区分大小写。HttpRequest
对象中解析的查询字符串的后备存储是System.Collections.Specialized.NameValueCollection
,其中恰好是不区分大小写的(默认情况下)。name
属性的值,HTML规范说它是区分大小写的。但据我所知,没有人真的那样做。
总之,它们在许多编程语言中被认为是相等的。
URL的不同部分在大小写敏感性方面是不同的:
- 协议(
http
)—不区分大小写 - 主机名(
example.com
)——不区分大小写 - 路径(
/folder/document.html
)——区分大小写 - 查询字符串Key(
?fuzz=bar
OR?FUZZ=bar
)——不区分大小写 - 查询字符串值(
?fuzz=bar&buzz=BAR
)——区分大小写
根据hurl。如果,key
等于123
, KEY
等于198
。它们可以作为两个不同的查询字符串访问。