9

由于与联属合作伙伴的沟通不畅,我们正在使用他们在我们服务器上调用的 URL 混淆了。

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

 /AAAAAAAA/?b=CCCCCCC

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

 ?b=CCCCCCC/AAAAAAA

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

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

4

3 回答 3

11

根据RFC 3986:统一资源标识符 (URI):通用语法(从 2005 年开始),是的,/允许在查询组件中使用。这是查询字符串的 BNF:(在RFC 3986的附录 A 中)

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

规范说:

  • 字符斜线(“/”)和问号(“?”)可以表示查询组件中的数据
  • 由于查询组件通常用于以“key=value”对的形式携带标识信息,并且一个经常使用的值是对另一个 URI 的引用,因此有时避免对这些字符进行百分比编码会更好地提高可用性

这是一个相关的问题: 查询字符串:查询字符串是否可以包含同时包含查询字符串的 URL?

于 2011-04-17T02:35:24.653 回答
2

虽然我从来没有遇到过问题,但根据RFC 2396,它们在技术上是不允许的:

在查询组件中,保留字符“;”、“/”、“?”、“:”、“@”、“&”、“=”、“+”、“”和“$”。

但正如我所说......我从来没有遇到任何问题。我认为这是旧浏览器的问题,但也许有人可以更清楚地说明这导致的问题?

于 2010-02-03T00:04:36.470 回答
1

根据RFC 2396第 3.4 节,斜杠是 URL 查询部分中的“保留字符” ,因此必须根据第 2.2 节对其进行编码。也就是说,查询部分可以包含%2F但不应包含/.

于 2010-02-03T00:07:35.263 回答