我需要允许用户按如下方式提交查询;
/search/"my search string"
但由于请求验证失败,如以下2个问题所述:
How to include quote characters as a route parameter? Getting "Illegal characters in path" message
How to modify request validation?
我目前正在尝试弄清楚如何禁用引号字符的请求验证,但是我想知道在实际将该网站置于此禁用状态之前的风险?我不会禁用请求验证,除非我只能为引号字符禁用它,所以我打算禁止当前不允许的所有其他字符。
答案 0 :(得分:3)
根据URI通用语法规范(RFC 2396),双引号字符被明确排除,必须进行转义(即%22
)。见2.4.3节。规范中给出的理由:
角括号“<”和“>”并且双引号(“)字符被排除,因为它们通常用作文本文档和协议字段中URI的分隔符。
您可以很容易地看到为什么会出现这种情况 - 想象一下尝试在HTML中创建一个链接到您的网址:
<a href="http://somesite/search/"my search string""/>
这将使HTML解析失败(并且还会破坏SO的语法突出显示)。您也可能无法使用URL进行基本操作,例如通过电子邮件将其发送给某人(电子邮件客户端无法正确解析URL),将其发布到留言板上,通过即时消息发送等等。
对于它的价值,还明确排除了空格(RFC的相同部分解释了原因)。