我有一个看起来像这样的传入请求,它来自第三部分所以它不在我的手中。
/external/endpoint?PRN=1234567&INPUT=1111;ABCDEF&CUSTOMER=555454545
当我在request.GET
中打印请求参数时,这就是我得到的。 INPUT
参数被切割成两个不同的参数。
Incoming dict: {u'INPUT': [u'1111'], u'ABCDEF': [u''],u'CUSTOMER': [u'555454545'], u'PRN': [u'1234567']}
我自己可以破解请求URL,但我对请求对象的默认行为感到惊讶。认为它只将参数除以“&”。其他人看到这个或知道这是否应该发生?
答案 0 :(得分:1)
根据W3,“;”实际上是URI的首选参数分隔符。
http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2
B.2.2 URI属性值中的&符号
提交表单时构造的URI可以用作 锚式链接(例如,A元素的href属性)。 不幸的是,使用“&”用于分隔表单字段的字符 与其在SGML属性值中的使用交互以划分字符 实体参考。例如,要使用URI
http://host/?x=1&y=2
作为链接URI,必须写入<A href="http://host/?x=1&y=2">
或<A href="http://host/?x=1&y=2">
。我们建议使用HTTP服务器实现者,特别是CGI 实现者支持使用“;”取代“&amp;”保存作者 逃避“&amp;”的麻烦这种方式的人物。