这种混乱是因为URL至今仍被“破坏”。采取“http://www.google.com“例如,这是一个URL。URL是一个统一的资源定位器,实际上是一个指向网页的指针(在大多数情况下)。自1994年第一个规范以来,URL实际上有一个非常明确的结构。+---------------+-------------------+
| Part | Data |
+---------------+-------------------+
| Scheme | http |
| Host | www.google.com |
+---------------+-------------------++-------------------+---------------------+
| Part | Data |
+-------------------+---------------------+
| Scheme | https |
| User | bob |
| Password | bobby |
| Host | www.lunatech.com |
| Port | 8080 |
| Path | /file;p=1 |
| Path parameter | p=1 |
| Query | q=2 |
| Fragment | third |
+-------------------+---------------------+
https://bob:bobby@www.lunatech.com:8080/file;p=1?q=2#third
\___/ \_/ \___/ \______________/ \__/\_______/ \_/ \___/
| | | | | | \_/ | |
Scheme User Password Host Port Path | | Fragment
\_____________________________/ | Query
| Path parameter
Authority每个部分的保留字符是不同的。
对于HTTPURL,路径片段部分中的空格必须编码为“%20”(不是,绝对不是“+”),而路径片段部分中的“+”字符可以保留未编码。
现在,在查询部分中,空格可以编码到“+”(为了向后兼容性:不要试图在URI标准中搜索它)或“%20”,而“+”字符(由于这种歧义的结果)必须转义到“%2B”。
这意味着“蓝色+浅蓝”字符串必须在路径和查询部分中进行不同的编码:
从这里可以推断,如果没有对URL结构的语法感知,就不可能对完整构造的URL进行编码。
这归结为:
你应该%20在?和+之后。
本文详细解析了URL的组成部分及其编码规则,强调了不同部分的保留字符差异,并给出了具体实例说明。

673

被折叠的 条评论
为什么被折叠?



