由于与联盟合作伙伴的沟通错误,我们正在处理他们在我们服务器上调用的网址。
这是他们应该在我们的服务器上调用的URL:
/AAAAAAAA/?b=CCCCCCC
不幸的是,它已在他们的系统中实现为
?b=CCCCCCC/AAAAAAA
我可以轻松解析组件,但我担心带/的查询字符串参数实际上并不是有效的URL。
URL中的/实际上是否有效 - 或者我应该关注。在什么情况下,未编码的/会导致查询字符串出现问题。
答案 0 :(得分:6)
根据RFC 3986: Uniform Resource Identifier (URI): Generic Syntax(从2005年开始),是的,查询组件中允许/
。这是查询字符串的BNF :(在RFC 3986中的附录A)
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
规范说:
以下是相关问题: Query string: Can a query string contain a URL that also contains query strings?
答案 1 :(得分:2)
虽然我从来没有遇到任何问题,但根据RFC 2396,技术上不允许这样做:
在查询组件中,字符“;”,“/”,“?”,“:”,“@”,“&”,“=”,“+”,“,”和“$” “保留。
但正如我所说......我从来没有遇到过任何问题。我认为旧版浏览器的问题比什么都重要,但也许有人可以对这个导致的问题有所了解?
答案 2 :(得分:1)
Slash是每个RFC 2396部分3.4的URL的查询部分中的“保留字符”,因此根据第2.2节,它必须进行编码。也就是说,查询部分可以包含%2F
,但不应包含/
。