跳到正文
DevTools / URL 解析

URL 解析

URL 看起来是一个字符串,实际上是由八种规则各异的组件构成的,因此缺陷也聚集在这里:查询参数里的 &、服务端永远看不到的片段、与协议默认值相同时就消失的端口。本工具把 URL 拆解成各个组成部分,把查询字符串呈现为可编辑的表格并标出重复键,提供百分号解码让可读形式可见,并根据你的修改重新拼装 URL,方便直接粘回配置或浏览器。

完全在浏览器本地运行——不会上传任何内容。

粘贴完整 URL,或输入相对路径并填写基准地址

协议https
用户名ada
密码lovelace
主机api.example.co.uk
端口8443
源https://api.example.co.uk:8443
路径/v2/search/items
查询字符串q=uuid+generator&tags=dev,web&tags=offline&page=2&debug
片段results
查询参数 (5)
键值
quuid generator
⧉tagsdev,web
⧉tagsoffline
page2
debug—

同一键出现多次时,不同语言读到的值可能不同。 tags

工作原理

URL 按形式化文法解析,各组件之间是层级关系。协议决定其余部分的解释方式;授权部分包含可选的用户信息、主机和可选端口;路径是一串分段,其含义取决于协议——对 http 和 https 它对应类似文件系统的层级,而对 mailto 或 data 则完全是另一回事;查询从第一个问号开始,片段从第一个井号开始——而片段永远不会被发送给服务端,这是一整类缺陷的根源:单页应用的路由参数对后端而言根本不可见。

查询字符串有自己的结构,而 URL 文法并未描述它。惯例是键值对以 & 分隔,但规范并不要求如此,而且同一个键完全可能合法地出现多次。各语言对此的暴露方式并不一致:PHP 取最后一次出现,Go 的 url.Values 给出整个切片,许多框架则给出数组。本工具把每一对都保留为独立行并标出重复键,而不是静默覆盖,因为服务端实际读到哪个值取决于一个语言层面的决定,你应当知道它。

百分号解码只用于展示,原始形式从不丢失。参数值 a%20b 与 a+b 在表单编码语境下是同一个值,在路径中却是不同的值,因此解码列显示可读文本,而重建 URL 时仍然使用编码后的形式。这正是让重定向参数里的嵌套 URL 变得可理解的原因:编码后的值含有自己的问号和 &,全都被转义了,解一次码就能毫无歧义地暴露真实结构。

重建是同样的规则反向应用,并顺带完成规范化。默认端口会被丢弃,主机会转为小写,对于相对输入会按你提供的基准地址解析路径,空参数会被保留而不是丢弃。结果与输入在含义上逐字节等价,形式上却是规范的——如果这个 URL 将被比较、缓存或签名,这正是你想要的;签名方案会哈希确切的字符串,因此与原串相差一个字符的“规范化”URL 会导致验签失败。

常见应用场景

  • 拆解一条很长的跟踪链接,找出隐藏在重定向参数里的真实目的地。
  • 修改查询字符串里的筛选条件或页码,而不必手工处理编码。
  • 排查前端设置的参数为什么没有到达后端——通常是片段或未编码的 & 造成的。
  • 把 URL 拆成主机与路径,用于编写防火墙规则或 CORS 配置。
  • 把相对 URL 按基准地址解析,看浏览器实际会请求的绝对形式。
  • 检查查询字符串是否存在重复键,因为不同框架对它的处理方式并不相同。

最后更新: 2026-10-14

常见问题解答

为什么服务端收不到我的参数?

三种原因几乎覆盖了所有情况:值位于井号之后,而片段从不发送给服务端;值中含有未转义的 &,解析器把后面部分当成了新参数;值中含有未转义的等号,切分位置错了。把 URL 解码并查看原始查询字符串是最快的判断方式:如果目标值根本没出现在解析出的表格里,那就是上述结构性问题,而不是服务端的 bug。

同一个键出现两次会怎样?

完全取决于读取它的语言。PHP 和许多框架保留最后一个值,有些保留第一个,Go 以切片形式全部暴露,Ruby 的 Rack 则会报错或给出数组,视配置而定。这是真实的安全缺陷来源:校验层读取参数的第一个值、业务层读取最后一个值,两者就可能被制造出分歧,这正是 HTTP 参数污染攻击的基础。表格会标出重复键,让这种歧义可见。

片段真的不会发给服务端吗?

没错,而这是 URL 中最常被误解的部分。片段在请求发出之前就被浏览器剥离,从不属于 HTTP 请求行的一部分,因此服务端代码看不到它。浏览器用它滚动到锚点,单页应用用它做客户端路由,这就是为什么同一条 URL 在浏览器里能正常工作,被服务端或爬虫抓取时却返回了不同的页面。

URL 里会包含凭证吗?

可能,就在主机之前的用户信息部分——https://user:password@example.com/ 是合法的。凡是在第一个斜杠之前出现 @ 的 URL,都应被视为携带凭证,绝不要记录、分享或粘贴到第三方服务。本工具完全在浏览器内运行、不传输任何内容,但查询字符串里带访问令牌的签名 URL 本身就是持有者凭证,用任何工具查看都一样。

相关工具