2

我有一个看起来像这样的传入请求,它来自第三方,所以它不在我的控制范围内。

/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,但我对请求对象的默认行为感到惊讶。以为它只用“&”划分参数。其他人看到这个或知道这是否应该发生?

4

1 回答 1

1

根据 W3,“;” 实际上是 URI 的首选参数分隔符。

http://www.w3.org/TR/html4/appendix/notes.html#hB.2.2

B.2.2 URI 属性值中的和号

提交表单时构建的 URI 可以用作锚样式链接(例如,A 元素的 href 属性)。不幸的是,使用“&”字符来分隔表单字段与它在 SGML 属性值中用于分隔字符实体引用的使用相互作用。例如,要将 URIhttp://host/?x=1&y=2 用作链接 URI,它必须写为<A href="http://host/?x=1&#38;y=2"><A href="http://host/?x=1&amp;y=2">

我们建议 HTTP 服务器实现者,特别是 CGI 实现者支持使用“;” 代替“&”来省去作者以这种方式转义“&”字符的麻烦。

于 2013-03-06T00:01:46.810 回答