rfc 1738对于“搜索部分”中的正斜杠编码并不准确:
如果在方案中保留与八位字节对应的字符,则必须对八位字节进行编码。
...
只有字母数字,特殊字符“$ -_。+!*'(),”和 可以使用用于其保留目的的保留字符 在URL中未编码。
...
在'path'和'searchpart'组件中,“/”,“;”,“?”保留。
您是否知道网址搜索部分中“/”的“保留目的”是什么?
是否有任何真正的理由遵循规范并对正斜杠进行编码 我的服务器处理未编码的斜杠?
当我需要不断解码带有斜杠的字母数字的urls参数时,它让我疯狂。
这是一个生活的例子:
http://localhost/login?url=/a/path/to/protected/content
VS
http://localhost/login?url=%2Fa%2Fpath%2Fto%2Fprotected%2Fcontent“
答案 0 :(得分:2)
请注意RFC 3986更新了RFC 1738(虽然没有废弃它,我认为这表明它旨在澄清而不是相互矛盾)。
RFC 3986在3.4节中说,URI的query
部分的语法是:
query = *( pchar / "/" / "?" )
URI的ABNF可方便地收集在附录A中,表示
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
pct-encoded = "%" HEXDIG HEXDIG
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
这非常明确地表明在请求部分中斜杠是合法的,因此不需要进行编码。特别是,您的示例http://localhost/login?url=/a/path/to/protected/content
很好,http://localhost/login?abc123-.+~!$&'()*+,;=%00/?:@
第2.4节指出只有当一个人想要在URI的一部分中包含保留字符时才需要编码字符(这里不适用)。