是一个有/的有效查询字符串?

时间:2010-02-02 23:49:45

标签: http uri query-string uriencoding

由于与联盟合作伙伴的沟通错误,我们正在处理他们在我们服务器上调用的网址。

这是他们应该在我们的服务器上调用的URL:

 /AAAAAAAA/?b=CCCCCCC

不幸的是,它已在他们的系统中实现为

 ?b=CCCCCCC/AAAAAAA

我可以轻松解析组件,但我担心带/的查询字符串参数实际上并不是有效的URL。

URL中的/实际上是否有效 - 或者我应该关注。在什么情况下,未编码的/会导致查询字符串出现问题。

3 个答案:

答案 0 :(得分:6)

根据RFC 3986: Uniform Resource Identifier (URI): Generic Syntax(从2005年开始),是的,查询组件中允许/。这是查询字符串的BNF :(在RFC 3986中的附录A)

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

规范说:

  • 字符斜杠(“/”)和问号(“?”)可能表示查询组件中的数据
  • 由于查询组件通常用于携带“key = value”对形式的标识信息,而一个常用值是对另一个URI的引用,有时可以更好地避免百分比-encoding 那些字符

以下是相关问题: 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,但不应包含/