正在加载,请稍候…

URL 结构详解:解析并理解任何 URL

学习 URL 的组成部分:协议、主机、端口、路径、查询字符串和片段。立即解析任何 URL。

URL 结构详解:解析并理解任何 URL

什么是 URL?

URL(统一资源定位符)是对 Web 资源的引用,它指定了资源的位置和获取机制。每个 URL 都遵循 RFC 3986 中定义的标准结构。

理解 URL 结构对于 Web 开发、API 设计、安全分析和调试网络问题至关重要。

URL 结构详解:解析并理解任何 URL 插图

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 与相对 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 规范化

同一资源可以通过多种 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 解析器