URL 编解码知识

关于 URL 编码知识的笔记:

URL 的结构

一个复杂的 URL 例如 https://bob:bobby@www.lunatech.com:8080/file;p=1?q=2#third,其中的各部分分别为:

名称 数据
协议 https
用户名 bob
密码 bobby
主机地址 www.lunatech.com
端口 8080
路径 /file
路径参数 p=1
查询参数 q=2
片段 third

路径(path)部分以“/”开始,并且用“/”分开各个文件夹。如“/photos/egypt/cairo/first.jpg”包含四个路径片段(path segment):photosegyptcairofirst,jpg。每个路径片段都可以带路径参数(可选,也叫 matrix 参数)。路径参数位于片段末尾,以“;”开头,并用“;”分隔。参数名和数值之间用“=”分开,例如 /file;p=1 表示 file 有一个参数 p=1。这类参数并不常用。

哪些字符需要编码

RFC3986 文档规定,URL 中只允许包含英文字母(a-zA-Z)、数字(0-9)、- _ . ~4个特殊字符以及所有保留字符。

保留字符:URL 可以划分成若干个组件,协议、主机、路径等。有一些字符(: / ? # [ ] @)是用作分隔不同组件的。例如“:”用于分隔协议和主机,“/”用于分隔主机和路径,“?”用于分隔路径和查询参数,等等。还有一些字符(! $ & ( ) * + , ; =)用于在每个组件中起到分隔作用的,如“=”用于表示查询参数中的键值对,“&”符号用于分隔查询多个键值对。当组件中的普通数据包含这些特殊字符时,需要对其进行编码。

RFC3986 中指定了以下字符为保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]

阅读全文 »

flight