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

时间:2014-07-11 14:03:56

标签: http url uri query-string request.querystring

假设我有这样的网址:

http://www.example.com?key=123&KEY=198

那将是

的结果
request.querystring("key")

and 

request.querystring("KEY")

我有点困惑。

4 个答案:

答案 0 :(得分:54)

The RFC for URIs说:

  

6.2.2.1。案例规范化

     

当URI使用通用语法的组件时,组件语法等价规则始终适用;即,方案和主机不区分大小写,因此应该标准化为小写。例如,URI等同于http://www.example.com/

     

除非方案另有明确定义,否则假定其他通用语法组件区分大小写(参见第6.2.3节)。

请注意,scheme(此处为“http”),host(服务器名称)不区分大小写,但无论如何都应该是小写的。其余部分区分大小写,除非您使用的是明确表示它应该不敏感的不同方案。

因此,根据规范,密钥和KEY在所有基于http的URI中都是不同的东西。

答案 1 :(得分:43)

@ gbjbaanb的答案不正确:RFC只为查询字符串指定了允许的字符集。与URI的路径片段组件一样,查询 URI组件仅对权限提供 资源。

完全取决于这些东西是否区分大小写。

对于C#和IIS,HttpRequest对象中已解析的查询字符串的后备存储是System.Collections.Specialized.NameValueCollection恰好不区分大小写(通过默认值)。

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

此外,由于页面本身(以及客户端javascript)可以访问原始URI,因此可以随意使用它。

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

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

答案 2 :(得分:8)

根据hurl.itkey将等于123KEY198。它们可以作为两个不同的查询字符串访问。

答案 3 :(得分:1)

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

URL的不同部分在区分大小写方面有所不同:

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