悦省yueser.com

← 全部指南

URL 解析指南:把一条链接拆开看

排查跳转问题,第一步永远是把链接拆开:参数到底带没带、值有没有被二次编码、锚点里的路由参数是不是根本没发给服务端。

打开工具:URL 解析器

什么时候需要拆链接

投放链接的 utm 参数对不上、回调地址多了一个斜杠、分享出去的链接参数丢失、用户说「点进去是首页」——这些都需要先看清楚每一段是什么,而不是盯着整条链接找,拆开看通常快得多。

开发时也常用:确认查询参数有没有被重复编码、%20 和 + 到底哪个是空格、锚点里的 hash 路由参数有没有被服务端收到。拆开之后,问题往往一眼可见,不用再靠打印日志逐段猜。

空格是 %20,+ 也算空格

URL 里空格的标准写法是 %20;而在查询串里,按表单规则 + 也表示空格。所以 a=hello+world 和 a=hello%20world 解析出来是同一个值。真正的加号要写成 %2B,否则会被当成空格。

工具会解码参数值,但「查询串」那一栏保持原始写法,方便你对照编码前后的差异。重复的键会各占一行,不会被合并;顺序也按出现顺序保留,这对排查签名类参数很重要,因为顺序变了签名就不对。

边界:只解析,不判断

相对路径 /a/b?c=1 没有协议和主机,无法按标准 URL 解析,会直接报错;请先补成完整地址。锚点整体显示,不会拆成参数,因为井号之后的内容本来就不发给服务端。

主机名会被规范化:转小写、去掉默认端口、国际化域名转成 punycode。这意味着你看到的 host 可能和输入不完全一样,但它们是等价的。工具不会访问链接,也不会判断它是否安全。

常见问题

为什么相对路径解析失败?

标准 URL 需要协议和主机才能确定各部分含义。相对路径缺少这两项,请先补成 https://example.com/a/b?c=1 再解析。

参数里的 + 为什么变成空格?

查询串按表单规则解析,+ 在历史上就代表空格。要传真正的加号,请写成 %2B;要传空格,%20 和 + 都可以,但拼进路径时只能用 %20。

锚点里的参数为什么不拆?

因为锚点(# 之后的内容)不会发送给服务端,只由浏览器处理。SPA 常把路由参数放在这里,但那是前端约定,不属于 URL 查询参数。

相关工具:URL 解析器