最近我遇到一种情况,让我完全不知道何时/应该执行URL编码以及原因。
通常,任何有关URL编码的教程都会告诉您
"?"
)需要在某些上下文中进行编码,以避免混淆。好的,我得到了一般的想法。但是最近,当我使用Python HTTP客户端以编程方式从RSS源中下载一些jpeg文件时,我遇到了一个问题。当其中一个JPEG文件奇怪地出现在一个非常小的(~800字节)空白框而不是预期的图像时,问题就出现了。图像在浏览器中正确显示,因此HTTP请求必定出错。
在逐步完成问题并模仿确切的标题和浏览器正在使用的所有内容之后,服务器仍然保持返回错误的jpeg文件。我很困惑,我觉得服务器可能会以某种方式不同地处理我的IP或其他任何事情。
无论如何,最后我注意到了这个问题 - 路径中有一个编码的下划线字符,如:
http://www.example.com//2675898%5fsmall.jpg
当将其粘贴到浏览器窗口时,浏览器会自动将%5f
百分比解码为下划线字符。当我使用基于Python的http客户端做同样的事情时,一切正常。
但我仍然感到困惑的是为什么这是有效的,以及我真正需要遵循的规则。因此,在XML rss文档中找到了百分比编码的URL。我不知道为什么确切地说下划线是百分比编码的,但我的猜测是他们只是对URL进行了编码,因为它出现在XML属性中,因此他们需要确保某些字符像"&"
和其他保留的XML字符未出现。特别是下划线是无害的,但它们的百分比编码软件可能只有一个它使用的保留字符列表,其中包括下划线。
好的,很明显浏览器(或至少Chrome)有内置逻辑,可以在将URL发送到Web服务器之前自动百分比解码 URL。
规则是什么?在将URL发送到Web服务器之前,您应始终百分比解码一个URL吗?因为这似乎与许多在线教程所说的相矛盾,在发送它之前,您实际上应始终百分比 - ENcode 非ASCII URL路径因特网。
所以...是规则,我们应该始终百分比 - ENcode 非ASCII字符,然后通过互联网发送它们并且百分比 - DEcode 任何编码的ASCII字符(这不是特殊的URL字符,如查询字符串中的“?”)。
在通过网络发送之前,所有这些似乎都是URL的大量逻辑和处理。这有什么必要吗?