假设我有一个这样的网址:
http://www.example.com?key=123&KEY=198
那会是什么结果
request.querystring("key")
and
request.querystring("KEY")
我有点困惑。
假设我有一个这样的网址:
http://www.example.com?key=123&KEY=198
那会是什么结果
request.querystring("key")
and
request.querystring("KEY")
我有点困惑。
Answers:
URI的RFC表示:
6.2.2.1。案例规范化
当URI使用通用语法的组件时,组件语法等效规则始终适用;也就是说,方案和主机不区分大小写,因此应规范化为小写。例如,URI等效于http://www.example.com/。
除非该方案另有明确定义,否则其他通用语法组件均假定为区分大小写的(请参见第6.2.3节)。
请注意,方案(此处为“ http”),主机(服务器名称)不区分大小写,但无论如何都应小写。其余的区分大小写,除非您使用不同的方案明确表明它不区分大小写。
因此,根据规范,所有基于http的URI中的key和KEY都是不同的东西。
编辑:@Nicholas在假设权限定义了它接受的内容方面是部分错误的,这对于定义自己的URI的自定义方案和权限来说是正确的,但是http是每个人都遵循的定义明确的规范(或者您可以使用http查询例如,用竖线字符作为分隔符。想象一下那里的混乱!)
方案和主机不区分大小写,通常以小写形式提供;所有其他组件都以区分大小写的方式进行比较。除“保留”集中的字符外的其他字符等效于其百分比编码的八位字节:正常形式是不对其进行编码(请参阅[RFC3986]的2.1和2.2节)。
因此,规范中为HTTP方案定义的URI的查询部分区分大小写。如果Microsoft具有用于查询字符串的不区分大小写的解析器,则它不符合规范。并不是说我认为这种挑剔的程度确实很重要。
@gbjbaanb的答案不正确:RFC仅指定查询字符串的允许字符集。像URI的路径和片段组件一样,查询URI组件仅对提供资源的授权机构有意义。
该内容是否区分大小写完全取决于该权限。
在C#和IIS的情况下,后备存储在解析的查询字符串HttpRequest
对象是System.Collections.Specialized.NameValueCollection
其恰好是不区分大小写的(默认)。
由于该类提供了其他构造函数,因此允许提供不同的相等比较器,因此绝对没有什么可以阻止实现区分大小写的。
此外,由于页面本身(和客户端javascript)可以访问原始URI,因此他们可以随意使用它进行任何操作。
如果查询字符串是由于HTML表单提交而生成的,则键(名称)来自表单控件的值 name
属性 HTML规范说该属性区分大小写。但是据我所知,没有人真正做到这一点。
因此,最终,您必须知道查询字符串中的请求处理程序期望什么。它可能(或可能不)区分大小写。
据hurl.it,key
将等于123
和KEY
,198
。它们可以作为两个不同的查询字符串进行访问。