0.18 URL 结构拆解:地址栏那一长串在说什么
第〇篇「零基础预科」免费。这一篇把 URL 逐段拆开,让你彻底看懂地址栏。
一、URL 是什么
URL(Uniform Resource Locator,统一资源定位符) 是互联网上某个资源的完整地址,告诉浏览器:用什么协议、连哪台机器、找哪个资源、附带什么参数。
二、逐段拆解
以这个 URL 为例:
https://gysec.top:443/wiki/deser-lazymap?from=home&tab=paid#section-2
└─┬─┘ └───┬───┘ └┬┘ └────────┬─────────┘ └──────┬───────┘ └───┬───┘
协议 主机 端口 路径 查询串 片段| 部分 | 例子 | 含义 |
|---|---|---|
| 协议 scheme | https:// | 用什么协议(http/https) |
| 主机 host | gysec.top | 域名或 IP |
| 端口 port | :443 | 可省略(https 默认 443,http 默认 80) |
| 路径 path | /wiki/deser-lazymap | 服务器上的资源/路由 |
| 查询 query | ?from=home&tab=paid | 传给服务器的参数 |
| 片段 fragment | #section-2 | 页内定位,不发给服务器 |
三、查询字符串详解
以 ?id=1&name=abc&debug=true 为例:
- 以
?开始; - 多个参数用
&连接; - 每个参数是
键=值; - 特殊字符会被百分号编码(如空格成
%20、中文成%E4...)。
你的网站链接里出现过
?utm_source=gysec&utm_medium=about...,那就是一组用来统计流量来源的查询参数;?preview=member则用来在本地模拟会员态。
四、路径与片段
- 路径:决定服务器把请求交给哪个页面/接口,本系列用的是"slug"(如
/wiki/deser-lazymap),编号不进 URL,改编号不会断链; - 片段
#:只在浏览器内用于滚动到某个标题/锚点,不会随请求发给服务器; - 结尾的
/表示目录(如/wiki/),有时有无斜杠会被当作不同地址。
五、安全视角
URL 是 Web 攻击输入的主要载体之一:
- 查询参数被拼进 SQL → SQL 注入;
- 参数被拼进系统命令 → 命令注入;
- 参数被拼进文件路径 → 路径穿越;
- 参数里塞 URL → SSRF;
- 所以测试时第一件事,往往就是找出所有参数、观察它们被怎么使用。
六、本篇小结
- URL = 协议 + 主机 + 端口 + 路径 + 查询串 + 片段。
- 查询串
?k=v&k2=v2传参,片段#仅浏览器内、不发服务器。 - 路径决定路由,slug 与编号解耦;特殊字符需百分号编码。
- 各类注入/穿越/SSRF 的输入常就在 URL 参数里。
下一篇 0.19 把整个过程串起来:从按下回车到页面出现,中间发生了什么。