URL 解析是如何工作的
解析器基于 WHATWG URL 标准运行,与浏览器处理任意 href 所使用的算法相同。我们将字符串传入原生 URL 构造函数,然后以属性形式读取每个组成部分。
- 验证输入. 空字符串会触发空输入提示。否则,我们将文本传入
new URL(text);若抛出 TypeError,则表示该字符串不是有效的绝对 URL。 - 读取结构性组成部分. 我们从 URL 对象中读取
protocol、username、password、host、hostname、port、pathname、search、hash和origin,每项单独一行,方便单独复制。 - 遍历查询字符串. 我们迭代
url.searchParams.entries(),每个键渲染为一行。原始值与decodeURIComponent(value)并排显示,使百分号编码的内容(空格、加号、Unicode)以纯文本呈现。 - 按需重建. 编辑任意单元格、删除行或添加新参数,然后点击「重建 URL」。工具将根据您的编辑重新构建 URL 对象,并将结果写回输入框。
- 实时模式. 开启实时模式后,每次按键都会以 150 毫秒防抖重新解析 URL。在从日志中粘贴片段时,可即时获得反馈。
为何在浏览器中解析 URL
- 数据不离开标签页. URL 中常携带令牌、会话 ID、OAuth 状态和签名查询参数,这些信息不应由第三方服务保管。本解析器使用浏览器本地运行的 URL 算法——无需上传,无网络请求。
- 与代码所见一致. Node.js、Deno、现代浏览器和 Cloudflare Workers 均采用 WHATWG URL 实现。在此检查 URL 所得的组成部分拆分,与生产代码中
new URL(input)调用的结果完全一致。 - 以人类可读的方式呈现查询字符串. 原始值与解码值并排显示,一眼即可同时看到
q=hello%20world的网络字节和可读的hello world,无需手动脑补 URL 解码。 - 往返编辑. 删除跟踪参数、修正路径中的拼写错误、更改端口——然后重建 URL。输出结果会再次经过 URL 构造函数验证,因此任何无效内容在复制前就会暴露出来。
常见应用场景
每当 URL 不仅仅是一个链接时,URL 解析便会出现在日常的开发、安全和分析工作中。
- 调试 API 端点:在发送 curl 或 Postman 请求前,确认基础 URL、路径和查询参数。
- 跟踪参数审计:列出落地页 URL 上的每个 UTM、gclid、fbclid 或活动键,决定保留哪些。
- 验证联盟与合作伙伴链接:粘贴深链接,在发布前确认目标主机和内嵌的跳转目标。
实例演示
将 https://example.com/search?q=hello%20world&lang=en 粘贴到输入框。协议显示为 https:,主机名显示为 example.com,路径名显示为 /search,查询字符串显示为 ?q=hello%20world&lang=en。查询表格展示两行:q 的原始值为 hello%20world,解码后为 hello world;lang 的原始值与解码值均为 en。点击 lang 行的「删除」,再点击「重建 URL」——输入框将更新为 https://example.com/search?q=hello%20world。
FAQ
什么是 URL 解析器?
URL 解析器接受一个 URL 字符串,将其分解为具名组成部分:协议(https)、用户信息(用户名、密码)、主机(主机名加可选端口)、路径、查询字符串和片段。它还会解码每个查询参数,使百分号编码的值(如 %20 表示空格)变得可读。本解析器使用 WHATWG URL 标准,与浏览器加载页面所用的标准相同。
主机(host)和主机名(hostname)有什么区别?
主机名仅指域名(或 IP 地址)——对于 example.com:8080,主机名为 example.com。当存在非默认端口时,主机为主机名加端口,因此同一 URL 的主机为 example.com:8080。对于使用默认端口的 URL(https 为 443,http 为 80),主机与主机名相同。
解码是自动进行的吗?
结构性组成部分(协议、主机名、端口、路径名)直接从 URL 对象读取,无需额外解码——URL 构造函数已将其规范化。查询值会显示两次:search 中出现的原始百分号编码字符串,以及由 decodeURIComponent 产生的解码值。这样您可以复制下游工具所需的任一形式。
我可以编辑并重建 URL 吗?
可以。每个组成部分单元格和每个查询参数单元格均可编辑。使用「添加」和「删除」按钮增减查询行,然后点击「从各部分重建 URL」。工具会将您的编辑重新传入 URL 构造函数并将结果写入输入框——如果编辑结果产生无效 URL,您将看到与在代码中调用 new URL() 时相同的错误提示。
URL 解析是每位 Web 开发者每周都会遇到的小任务。在浏览器中完成,使用与生产代码相同的算法,既快速又能确保数据留在本机。