URI、URL、URN概念及对照表
先做简单词义解释,因为我一开始以为URI和URL是一样的,所以先区分这三个最后一个词什么意思,方便不记混
-URL → L = Locator(定位符)
- URI → I = Identifier(标识符)【I是i的大写】
- URN → N = Name(名称)
1.URI:统一资源标识符(最大概念,用来唯一标记资源)
2. URL:统一资源定位符,URI子集;带有访问机制、位置信息,可以直接寻址获取资源(http、ftp、file)
完整结构:协议:// 域名 / 路径?参数
3. URN: 只给资源一个永久唯一名字,不提供地址、没有访问协议,浏览器不能直接打开,固定以 urn: 协议开头的永久命名规范,只是 URI 里其中一套 scheme
URI(所有资源标识符字符串总称)
├─ URL(带协议、地址,可以直接访问网页、接口,换服务器地址会变)
└─ URN(永久名称,无位置,无法直接访问,换服务器名称不变)

URL 侧重「在哪里找到资源」,URN 侧重「这个资源叫什么名字」;
网站接口路径 /api/userinfo 只是路径片段,拼接域名与协议后,才能构成完整 URL。
官方文档汇总
| 文档 | 说明 | 链接 |
|---|---|---|
| RFC 3986 | URI 通用语法,定义 URL 与 URI 的关系 | https://datatracker.ietf.org/doc/html/rfc3986 |
| RFC 8141 | URN 语法标准 | https://datatracker.ietf.org/doc/html/rfc8141 |
有几份 RFC 对RFC3986做了补充和更新(如 RFC 6874、RFC 8820),但没有取代它
存在:有一部分 URI,既不属于 URL,也不属于 URN
其他 URI:拥有独立 scheme,不是 urn: 前缀、同时严格意义不属于经典 URL
实例:
mailto:test@shturl.
tel:+8613800000000
news:comp.lang.java
data:image/png;base64,xxxx
既不是 URL,也不是 URN原因:
- 不是 URN:没有 urn: 开头,不遵循 URN 命名空间规范;
- 严格意义不属于传统 URL:传统 URL 定义依托网络主机定位资源(http/ftp 这类带 // 域名结构);
- 合法 URI:符合 RFC3986 通用语法,用来标识一类资源。
小知识:日常开发中很多人宽泛把 mailto、tel 统称为 URL
mongodb://localhost:27017
口语大家常叫数据库 URL;
标准术语:MongoDB 连接 URI;

浙公网安备 33010602011771号