
什么是 URL?
URL(统一资源定位符)是对 Web 资源的引用,它指定了资源的位置和获取机制。每个 URL 都遵循 RFC 3986 中定义的标准结构。
理解 URL 结构对于 Web 开发、API 设计、安全分析和调试网络问题至关重要。

URL 的组成部分
https://user:password@www.example.com:8080/path/to/page?key=value&foo=bar#section
│─────││───────────────────────────││──││─────────────││────────────││──────│
scheme authority (userinfo+host+port) path query fragment
分解如下:
| 组件 | 示例 | 用途 |
|---|---|---|
| Scheme | https |
使用的协议(http, https, ftp, mailto, file) |
| User Info | user:password |
可选的凭据(很少使用,不安全) |
| Host | www.example.com |
域名或 IP 地址 |
| Port | 8080 |
网络端口(省略时使用默认值:80=HTTP, 443=HTTPS) |
| Path | /path/to/page |
服务器上资源的位置 |
| Query | key=value&foo=bar |
附加参数(键值对) |
| Fragment | #section |
客户端锚点(从不发送到服务器) |
URL 协议方案
| 方案 | 协议 | 示例 |
|---|---|---|
http |
超文本传输 | http://example.com |
https |
安全 HTTP | https://example.com |
ftp |
文件传输 | ftp://files.example.com |
mailto |
电子邮件 | mailto:user@example.com |
file |
本地文件 | file:///home/user/doc.txt |
ws |
WebSocket | ws://chat.example.com/socket |
wss |
安全 WebSocket | wss://chat.example.com/socket |
data |
内联数据 | data:text/plain;base64,SGVsbG8= |

绝对 URL 与相对 URL
绝对 URL 包含完整的规范,包括 scheme 和 host:
https://www.example.com/about
相对 URL 相对于基础 URL 进行解析:
/about -> 从根目录开始的绝对路径
../images/logo.png -> 相对于当前目录
?page=2 -> 相同路径,不同查询
#section-2 -> 相同页面,不同片段
查询字符串解析
查询字符串在 ? 之后编码键值对。多个键值对由 & 分隔。特殊字符必须进行百分号编码。
// 在 JavaScript 中解析 URL
const url = new URL('https://example.com/search?q=hello world&page=2');
url.hostname // 'example.com'
url.pathname // '/search'
url.search // '?q=hello%20world&page=2'
url.searchParams.get('q') // 'hello world'(自动解码)
url.searchParams.get('page') // '2'
// 使用查询参数构建 URL
const url2 = new URL('https://api.example.com/users');
url2.searchParams.set('limit', '20');
url2.searchParams.set('sort', 'name');
url2.toString() // 'https://api.example.com/users?limit=20&sort=name'

URL 规范化
同一资源可以通过多种 URL 形式引用。规范化将 URL 转换为规范形式:
http://Example.COM/index.html -> http://example.com/index.html (小写主机)
http://example.com:80/page -> http://example.com/page (移除默认端口)
http://example.com/a/../b/./c -> http://example.com/b/c (解析路径)
http://example.com/page?b=2&a=1 -> http://example.com/page?a=1&b=2 (排序参数)
URL 安全注意事项
开放重定向:如果您的应用程序使用 URL 参数重定向用户,请严格验证。https://yourapp.com/login?next=https://evil.com 可能重定向到钓鱼网站。
URL 注入:SQL 查询或日志文件中的 URL 可能包含有效负载。始终验证和编码来自用户输入的 URL。
基于片段的攻击:URL 片段(#hash)从不发送到服务器,因此对服务器端安全控制不可见。使用基于片段的路由时要小心。
Punycode 同形攻击:аpple.com(西里尔字母 a)在某些字体中看起来与 apple.com(拉丁字母 a)相同。始终向用户显示解码后的规范化 URL。
使用此工具
粘贴任何 URL 即可立即解析并分别显示每个组件:scheme、host、port、path、查询参数(以表格形式显示)和 fragment。适用于调试复杂 URL、提取查询参数和理解 URL 结构。
-> 尝试 URL 解析器