本文档概述了 Node.js 根据 WHATWG URL 标准处理、解析和操作 URL 的方式。URL 处理是 Node.js 中一项基本功能,为网络操作、资源标识和 Web 功能提供支持。本文档重点介绍核心 URL 处理机制,包括解析、组件操作以及国际化域名(IDNA)的特殊处理。
有关基于 URL 处理构建的 HTTP 和网络功能的信息,请参阅 HTTP 和网络。
Node.js 在 URL 处理方面实现了 WHATWG URL 标准。该标准定义了 URL 的解析、验证、序列化和操作方式。该实现使用了两个主要依赖项:
Node.js 中的 URL 处理功能提供以下能力:
Node.js 中的 URL 由以下组件组成:
| 组件 | 示例 | 描述 |
|---|---|---|
| 协议 | https | URL 的协议 |
| 用户名 | user | 用于认证的用户名 |
| 密码 | pass | 用于认证的密码 |
| 主机名 | example.com | 域名或 IP 地址 |
| 端口 | 8080 | 端口号 |
| 路径名 | /path/to/resource | 资源的路径 |
| 搜索 | ?query=value | 查询参数 |
| 哈希 | #section | 片段标识符 |
完整的 URL 示例: https://user:pass@example.com:8080/path/to/resource?query=value#section
来源
Node.js 中的 URL 解析系统集成了原生代码和 JavaScript 接口,以提供高效的 URL 处理。
来源
Node.js 中的 URL 对象提供了一个接口来访问和操作各种 URL 组件。该实现遵循 WHATWG URL 标准进行 URL 的解析和序列化。
来源
Node.js 遵循 WHATWG URL 标准进行 URL 组件的百分比编码和解码。
| 组件 | 需要编码的字符 |
|---|---|
| 路径名 | 控制字符、空格、", #, <, >, ?, `, {, }, 字符 > 127 |
| 搜索 | 控制字符、空格、", #, <, >, 字符 > 127 |
| 哈希 | 控制字符、空格、", <, >, `, 字符 > 127 |
该实现使用查找表来高效地确定在不同 URL 组件中哪些字符需要编码。
来源
Node.js 通过 Ada 库提供的 IDNA 处理能力支持国际化域名。这使得能够正确处理非 ASCII 域名。
来源
Node.js 提供了验证 URL 并检查其是否符合 WHATWG URL 标准的机制。URL.canParse() 静态方法允许检查一个字符串是否可以成功地解析为 URL。
验证过程会检查:
来源
URLSearchParams 接口提供了用于处理 URL 查询字符串的方法。它允许读取、修改和迭代查询参数。
| 方法 | 描述 |
|---|---|
append(name, value) | 追加一个新的键值对 |
delete(name, value?) | 按名称删除条目,可选地按值过滤 |
get(name) | 返回与名称关联的第一个值 |
getAll(name) | 返回与名称关联的所有值 |
has(name) | 返回参数是否存在 |
set(name, value) | 设置值,替换任何现有值 |
sort() | 对键值对进行排序 |
toString() | 返回序列化的查询字符串 |
来源
Node.js 还包括一个 URLPattern API,用于将 URL 与模式匹配。这提供了一种比简单字符串匹配更灵活的方式来处理 URL。
URLPattern API 支持:
来源
URL 处理功能与 Node.js 的其他核心模块集成,特别是 HTTP 和网络组件。
来源
Node.js 中的 URL 处理通过以下方式进行了优化:
来源
Node.js 致力于完全符合 WHATWG URL 标准。该实现经过 Web 平台测试(WPT)的测试,以确保与浏览器实现兼容。
WPT 测试涵盖:
来源