1. 简介

在本文中,我们将介绍 URI(Uniform Resource Identifier) 的概念,详细解析其组成部分,并说明它的用途。此外,我们还会说明 URI 与 URL、URN 之间的关系。

✅ 如果你对 Java 中的 URL 和 URI 有疑问,推荐阅读:Java URL vs URI 深度对比


2. 什么是统一资源标识符(URI)

URI 是一段用于标识超文本资源的字符序列。这个资源可以是抽象的,也可以是物理存在的,甚至可能是尚未创建的未来资源。URI 的语法设计非常灵活,能够涵盖各种使用场景。

2.1. URI 的通用语法结构

根据 RFC 1630,一个通用的 URI 通常由以下几个部分组成:

  • scheme(协议)
  • authority(授权信息)
  • path(路径)
  • query(查询参数)
  • fragment(片段)

下图展示了 URI 的语法结构:

URI syntax diagram

2.2. URI 各个组成部分详解

接下来我们逐个介绍这些部分:

  • scheme(协议)
    URI 的第一个组成部分,由一个字母开头,后跟字母、数字、加号(+)、点号(.)或连字符(-)组成。虽然语法上不区分大小写,但推荐使用小写。例如:httphttpsmailto

    ✅ scheme 是必须的,不能省略。

  • authority(授权信息)
    通常包含用户名、主机名和端口号,结构如下:

    [username@]host[:port]
    

    例如:user@example.com:8080

  • path(路径)
    由斜杠(/)分隔的路径片段组成,例如:/wiki/Main_Page

  • query(查询参数)
    可选部分,通常以问号(?)开头,包含多个键值对,用 &; 分隔。例如:

    ?page=1&limit=10
    
  • fragment(片段)
    可选部分,以井号(#)开头,用于标识资源内部的某个子部分。例如:

    #section-3
    

3. URI 示例

我们来看一些 URI 的实际使用示例,它可以作为定位器、名称,或者两者兼具。

3.1. URL 示例

看下面这个 URI 示例:

URI example with its components

这是一个 URL(Uniform Resource Locator),属于 URI 的一个子集,用于标识资源在网络中的位置,并说明如何获取该资源。

例如:

http://example.org/wiki/Main_Page
  • http 是 scheme
  • example.org 是 host
  • /wiki/Main_Page 是 path

这个 URL 表示通过 HTTP 协议从 example.org 获取 HTML 页面 /wiki/Main_Page

⚠️ Java 等语言在处理 URL 时需要特殊编码/解码处理,请参考:Java URL 编码解码实践

3.2. URN 示例

URN(Uniform Resource Name) 是 URI 的另一个子集,用于提供全球唯一且持久的资源标识,即使资源不存在或无法访问。

URN 的通用格式为:

urn:<namespace>:<specific part>

例如:

  • 书籍 ISBN 号:

    urn:isbn:0451450523
    

    表示书籍《The Last Unicorn》

  • 电影 ISAN 编号:

    urn:isan:0000-0000-2CEA-0000-1-0000-0000-Y
    

    表示电影《Spider-man》

3.3. 其他常见 URI 协议

除了最常见的 httphttps 外,还有以下协议:

协议 用途
tel 电话号码
mailto 邮件地址
skype Skype 通话
ftp 文件传输
file 本地文件路径

http 使用 80 端口通信,不加密,存在安全风险;而 https 使用加密通信并需要证书验证,安全性更高。


4. 关于 URI 协议(Scheme)

URI 的第一个组成部分就是 scheme,它非常关键:

  • 它告诉解析器这个 URI 的资源类型
  • 指明了 URI 的解析方式
  • 决定了相关的语义规则

通常,一个命名机构会定义该 scheme 的 URI 类型、格式和语义。许多 URI scheme 都注册在 IANA(Internet Assigned Numbers Authority),它是协调互联网标准的机构。

不过,并不是所有正在使用的 scheme 都在 IANA 注册过。


5. 总结

在本文中,我们介绍了 URI 的概念、组成部分,以及它与 URL 和 URN 的关系。

最关键的部分是 URI 的 scheme,它决定了:

  • 使用哪种协议
  • 如何解析 URI
  • 如何访问对应资源

理解 URI 的结构和作用,对于 Web 开发、API 设计、网络通信等场景都非常有帮助。如果你正在开发 Java 应用,也建议阅读:Java URL 与 URI 的区别详解 来进一步理解实际应用中的差异。


原始标题:What Is a URI?