我遇到过这样一种情况:GET
请求一个URL,其中查询字符串包含未编码的特殊字符,返回200 OK
该URL的原样但返回400 Bad Request
时特殊字符是url编码的。
此类网址的简化示例为:http://example.com/??foo/bar+foobar
请注意双重问号,以便整个查询字符串是具有空值的单个键值对。
对查询字符串键进行URL编码可以得到:http://example.com/?%3Ffoo%2Fbar+foobar
对包含已编码字符的此网址的GET
请求将返回400 Bad Request
。
处理这些URL的应用程序(我无法控制的第三方)似乎不喜欢查询字符串键包含url编码的非字母数字字符等价物。
我假设http://example.com/??foo/bar+foobar
和http://example.com/?%3Ffoo%2Fbar+foobar
应该是等价的,因此可以互换。这可能是一个无效的假设。
这两个网址是否相同,因此可以互换?
是不是因为没有将这些URL视为等效而处理这些URL的应用程序,或者是我的应用程序,即应用url-encoding来查询字符串键和值,是否应用此类编码有错误?