由于与联属合作伙伴的沟通不畅,我们正在使用他们在我们服务器上调用的 URL 混淆了。
这是他们应该在我们的服务器上调用的 URL:
/AAAAAAAA/?b=CCCCCCC
不幸的是,它是在他们的系统中实现的
?b=CCCCCCC/AAAAAAA
我可以轻松解析出组件,但我担心带有 / 的查询字符串参数实际上不是有效的 URL。
URL 中的 / 是否实际有效 - 或者我应该担心。在什么情况下未编码/导致查询字符串出现问题。
由于与联属合作伙伴的沟通不畅,我们正在使用他们在我们服务器上调用的 URL 混淆了。
这是他们应该在我们的服务器上调用的 URL:
/AAAAAAAA/?b=CCCCCCC
不幸的是,它是在他们的系统中实现的
?b=CCCCCCC/AAAAAAA
我可以轻松解析出组件,但我担心带有 / 的查询字符串参数实际上不是有效的 URL。
URL 中的 / 是否实际有效 - 或者我应该担心。在什么情况下未编码/导致查询字符串出现问题。
根据RFC 3986:统一资源标识符 (URI):通用语法(从 2005 年开始),是的,/
允许在查询组件中使用。这是查询字符串的 BNF:(在RFC 3986的附录 A 中)
query = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
规范说:
这是一个相关的问题: 查询字符串:查询字符串是否可以包含同时包含查询字符串的 URL?
虽然我从来没有遇到过问题,但根据RFC 2396,它们在技术上是不允许的:
在查询组件中,保留字符“;”、“/”、“?”、“:”、“@”、“&”、“=”、“+”、“”和“$”。
但正如我所说......我从来没有遇到任何问题。我认为这是旧浏览器的问题,但也许有人可以更清楚地说明这导致的问题?
根据RFC 2396第 3.4 节,斜杠是 URL 查询部分中的“保留字符” ,因此必须根据第 2.2 节对其进行编码。也就是说,查询部分可以包含%2F
但不应包含/
.