查询字符串键是否区分大小写



假设我有一个这样的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的情况下,HttpRequest对象中解析的查询字符串的后备存储是System.Collections.Specialized.NameValueCollection,其中恰好是不区分大小写的(默认情况下)。

由于该类提供的其他构造函数允许提供不同的相等比较器,因此绝对没有什么可以阻止实现使其区分大小写。

此外,由于页面本身(和客户端javascript)可以访问原始URI,因此他们可以自由地对它做任何他们想做的事情。

如果查询字符串是作为HTML表单提交的结果构建的,则键(名称)来自表单控件name属性的值,HTML规范说它是区分大小写的。但据我所知,没有人真的那样做。

因此,在一天结束时,您必须知道请求处理程序在您的查询字符串中期望什么。它可能(也可能不)区分大小写。

总之,它们在许多编程语言中被认为是相等的。

URL的不同部分在大小写敏感性方面是不同的:

  • 协议(http)—不区分大小写
  • 主机名(example.com)——不区分大小写
  • 路径(/folder/document.html)——区分大小写
  • 查询字符串Key(?fuzz=bar OR ?FUZZ=bar)——不区分大小写
  • 查询字符串值(?fuzz=bar&buzz=BAR)——区分大小写

根据hurl。如果,key等于123, KEY等于198。它们可以作为两个不同的查询字符串访问。

相关内容

  • 没有找到相关文章

最新更新