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

Sim*_*ver 9 uri http query-string uriencoding

由于与联盟合作伙伴的沟通错误,我们正在使用他们在我们的服务器上调用的URL混淆了.

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

 /AAAAAAAA/?b=CCCCCCC
Run Code Online (Sandbox Code Playgroud)

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

 ?b=CCCCCCC/AAAAAAA
Run Code Online (Sandbox Code Playgroud)

我可以很容易地解析组件,但我担心带有/的查询字符串参数实际上不是有效的URL.

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

Kaj*_*nus 9

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

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
Run Code Online (Sandbox Code Playgroud)

规范说:

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

以下是一个相关问题: 查询字符串:查询字符串是否包含也包含查询字符串的URL?

  • 这应该是正确答案,因为 RFC 3986 是 2396 的替代品。 (2认同)

Nic*_*ver 2

尽管我从未遇到过问题,但根据RFC 2396从技术上讲它们是不允许的:

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

但正如我所说...我从未遇到过任何问题。我认为这是旧版浏览器的问题,但也许有人可以进一步阐明由此导致的问题?