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

ch.*_*ida 62 url uri http request.querystring query-string

假设我有这样的网址:

http://www.example.com?key=123&KEY=198
Run Code Online (Sandbox Code Playgroud)

那将是什么结果

request.querystring("key")

and 

request.querystring("KEY")
Run Code Online (Sandbox Code Playgroud)

我有点困惑.

gbj*_*anb 61

URI的RFC说:

6.2.2.1.案例规范化

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

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

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

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


Nic*_*rey 52

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

关于这些东西是否区分大小写完全取决于该权限.

在C#和IIS的情况下,后备存储在所解析的查询字符串HttpRequest对象是System.Collections.Specialized.NameValueCollection恰好是不区分大小写的(默认).

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

此外,由于页面本身(以及客户端javascript)可以访问原始URI,因此可以随意使用它执行任何操作.

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

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

  • 我正在查看旧版C#代码,试图理解为什么键被视为不区分大小写,并且您的回答很好地解释了这一点。+1 (2认同)

sam*_*x01 13

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

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

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

  • 缺少参考资料.. (2认同)

小智 9

hurl.it,key将等于123KEY,198.它们可以作为两个不同的查询字符串访问.

  • @ ch.smrutiranjanparida,语言选择独立于如何处理查询参数.无论你使用COBOL,Perl,Erlang,Classic ASP,R,Java,Lisp都没关系.当然,解释查询字符串的库可能存在错误,程序员可能会努力地使用小写查询字符串(并且*不应该*),但从URI的角度来看,如果情况不同,它们会有所不同.有关详细信息,请参阅[已接受答案](http://stackoverflow.com/a/24700171/111575)中的[RFC](http://tools.ietf.org/html/rfc3986#page-11). (4认同)