不在 URL 中编码括号有啥危险?

Posted

技术标签:

【中文标题】不在 URL 中编码括号有啥危险?【英文标题】:What's the danger of not encoding brackets in URL?不在 URL 中编码括号有什么危险? 【发布时间】:2014-01-21 11:53:19 【问题描述】:

我已经阅读了这个问题:Is it ok to have brackets in URL? 和相关的RFC 3986。

对这个问题的回答说 [] 被 RFC 归类为 gen-delims,因此应该被编码,但 没有解释为什么不这样做会有问题的

所以,我不明白这样的 URL 可能有什么问题:

http://example.com/?foo[bar]=baz

为什么& 应该被编码是显而易见的,因为它被用作查询参数之间的分隔符。

但是[] 在 URL 中的用途是什么,如果它们没有经过 URL 编码,它们的意图会变得混乱吗?

【问题讨论】:

【参考方案1】:

来自RFC 3986 section 3.2.2:

由 Internet 协议文字地址(版本 6 [RFC3513] 或更高版本)标识的主机通过将 IP 文字括在方括号(“[”和“]”)中来区分。

例如,你本地机器的 IPv4 地址是 127.0.0.1,所以你可以通过 url 访问它

http://127.0.0.1/

IPv6 等价物是 ::1,所以 url 是

http://[::1]/

【讨论】:

我看过这条线,但不确定是否理解。可以举个例子吗? 那回答了我的问题,谢谢。不幸的是,RFC 强制在 URL 参数中编码方括号,尽管它们似乎只能用于主机部分。

以上是关于不在 URL 中编码括号有啥危险?的主要内容,如果未能解决你的问题,请参考以下文章

Python编码风格

URL 编码

当 url 包含编码的 & 符号时,MVC WEB API 路由失败

initialValues仅在硬编码时预填充数据,但不在动态数据中预填充数据

URL 编码与解码使用详解

在 Jersey Client 2 中编码花括号