什么是 Percent-Encoding?为什么它是必需的?
Percent-encoding 是现代 Web 基础设施的基础支柱,决定了数据如何在互联网上传输。互联网依赖统一资源标识符(URI)来定位资源。然而 URI 规范(RFC 3986)严格限制了可在 URL 中安全使用的字符。允许使用的“未保留字符”仅限于大写和小写字母(A-Z, a-z)、数字(0-9)、连字符(-)、句点(.)、下划线(_)和波浪号(~)。其他所有字符都被视为“不安全”或“保留”字符,因为它们在 URL 格式中具有特殊的结构含义。例如,& 用于分隔查询参数,= 用于赋值,/ 用于定义目录路径。如果您需要传输 & 字符本身作为数据内容而非分隔符,就必须进行 Percent 编码。
当字符需要被编码时,首先会根据 UTF-8 标准转换为对应的字节值。然后每个字节用 % 加上两位十六进制数字表示。例如,空格字符对应的十进制字节值为 32(十六进制为 20),因此变为 %20。@ 变成 %40,逗号变成 %2C。这种系统化的转换保证了 Web 服务器、负载均衡器和浏览器能够毫无歧义地解析 URL 边界。如果没有 Percent 编码,传递包含用户输入的复杂查询字符串会破坏 URL 结构,导致 400 Bad Request 错误,甚至引发 HTTP 参数污染等严重安全漏洞。
历史上,不同系统处理 URL 编码的方式有所差异。例如,提交 application/x-www-form-urlencoded 表单数据时传统上将空格编码为 +,而 RFC 3986 则严格规定为 %20。尽管现代 Web 框架抽象掉了这些细节,但拥有一个可靠且 100% 免费的手动 Percent 编码工具,对于调试 API 和构建深度链接而言仍然是不可或缺的。