URL和URI的区别
一、核心定义(先搞懂“是什么”)
1. URI(Uniform Resource Identifier):统一资源标识符
本质:用来唯一标识一个资源的字符串,核心作用是“识别”资源,不管这个资源在哪、怎么访问。
可以把它理解成:给资源分配的“身份证号”,只负责“认出来”这个资源,不关心怎么找到它。
2. URL(Uniform Resource Locator):统一资源定位符
本质:是URI的子集,不仅能标识资源,还能给出访问这个资源的具体地址和方式。
可以把它理解成:资源的“详细地址+导航方式”,比如“北京市朝阳区XX路XX号(地址),坐地铁1号线到XX站(方式)”。
二、关键区别与关系(用表格+例子说透)
| 维度 | URI(标识符) | URL(定位符) |
|---|---|---|
| 核心作用 | 唯一识别资源(“是谁”) | 定位并访问资源(“在哪+怎么去”) |
| 范围 | 包含URL和URN(统一资源名称,很少用) | 属于URI的一种具体实现 |
| 组成 | 仅需满足“唯一性”,格式灵活 | 必须包含:协议(http/https)、域名/IP、路径、端口等(有固定格式) |
| 例子 | 1. /user/123(仅标识资源,无访问方式)2. mailto:test@example.com(URI但非URL) |
1. https://www.baidu.com/user/123(有协议、域名、路径)2. ftp://192.168.1.1/file.txt(有协议、IP、文件路径) |
补充:容易混淆的例子
- ✅ 是URI也是URL:
https://www.weather.com/北京(既标识“北京的天气资源”,又能通过https协议访问); - ✅ 是URI但不是URL:
urn:isbn:9787115546081(URN,仅标识“某本书的ISBN号”,无法直接访问); - ❌ 是URL但不是URI:不存在!所有URL都是URI。
三、实际开发中的应用场景
-
URI的使用场景:
- 后端接口设计:比如RESTful API中,
/api/user/{id}是URI,仅用来标识“某个用户资源”,不管是通过http、https还是其他协议访问; - 数据库资源标识:比如
db:user:123,仅标识数据库中ID为123的用户,无访问方式。
- 后端接口设计:比如RESTful API中,
-
URL的使用场景:
- 浏览器地址栏:输入的
https://www.taobao.com是URL,浏览器能通过https协议找到淘宝服务器并加载页面; - JMeter/Fiddler测试:配置的请求地址(如
https://devapi.qweather.com/v7/weather/now)是URL,包含协议、域名、接口路径,能直接发起请求。
- 浏览器地址栏:输入的
总结
- 核心关系:URL属于URI,但URI不一定是URL(URI还包含URN);
- 核心区别:URI只负责“识别资源”,URL额外负责“定位并访问资源”;
- 开发实操:日常说的“接口地址”“网页链接”本质都是URL,而接口路径(如
/user/123)是URI。
简单记:URI是“身份证”,URL是“带导航的身份证”。
浙公网安备 33010602011771号