我们或许都知道 URL 是指“链接”,但如果稍微了解多一些东西,就会发现类似的词汇还有 URI 和 URN,它们很类似,因此容易搞混。这三个缩写分别是代表什么?有什么意义?本文详细解释 URI、URL 和 URN 之间的区别和联系。

URI、URL 和 URN 的定义

URI

URI (Uniform Resource Identifier,统一资源标识符),是一串用来标识一个互联网资源“身份”的字符,该“身份”或由资源的位置确定,或由资源的名称确定,或由以上两者共同确定。

举个例子,你有一个朋友 Flink,他住在深圳市盐田路 123 号房,假设现在你要找到这个朋友,我们需要用到他的名字或者他的住址(当然也可以两个都用),不管是哪种情况,你实际都是在使用 URI。

URL

URL (Uniform Resource Locator,统一资源定位符)。与 URI 类似,它也是一个字符串,但是 URL 仅仅表示了互联网资源的地址(或称之为“位置”)。比如,你只需要知道朋友 Flink 的住址,就可以通过这个地址来找到他。

URL 是目前表示互联网资源最常见的方法,下文会详细讲解 URL。

URN

URN (Uniform Resource Name,统一资源名称),顾名思义,就是互联网资源的名称。当然,它必须是在互联网上是独一无二的,因此不能使用资源的文件名。不同的互联网资源可能拥有相同的名称,通过这种方式定位资源较为困难,因此 URN 的使用较少。

关系

通过以上三个定义应该可以看出,URI 是 URL 或是 URN。也就是说,任何 URL 和 URN 都可以称作是 URI。URL、URN 是 URI 的子集。

本文地址:https://www.jeddd.com/article/distinguish-uri-url-urn.html

URL 详解

为了能使客户端从服务器上请求资源,HTTP 请求会通过 URL 被发送到服务器上。下面来讲解标准 URL 的格式。

URL 的格式中有两个必需成分——协议(连接方法)和地址(连接目标)。事实上,URL 还可以携带更多信息,不过那些都是可选的(非必需的,如端口号路径等)。下面使用 2 个实例来解释 URL 的格式。

例1

http://www.example.com/item/show.html

http是协议名称(scheme)。定义了访问资源的方法。常见的协议有 HTTP(超文本传输协议)、HTTPSFTP(文件传输协议) 等。

www.example.com是主机(host)。一般是域名或 IP 地址。通常情况下,域名会被 DNS 服务器解析为一个 IP 后才能访问目标主机。

/item/show.html是路径(path)。这是一个可选的成分,是表示服务器资源位置的方法。比如此例是请求服务器目录下 item 目录内的 show.html 文件。另外说明,如果路径由正斜杠(/)结尾,实际上是指向了所请求目录下的默认文件(此默认文件由服务器定义),一般是诸如 index.html、index.php 等索引文件。

例2

再看一个复杂一些的例子,增加了更多可选成分:

http://www.example.com:8080/people/info.php?name=Flink&age=20

8080是端口号(port)。这是一个可选的成分。是一个跟在域名后,以英文冒号开头,范围在 0~65535 的整数。每个协议都有默认端口号,如HTTP 是 80,HTTPS 是 443,FTP 是 21 等,因此常常省略不写。此例中为 HTTP 协议但端口号不是默认的 80,因此需显式指明端口号:8080。

?name=Flink&age=20是Query。也是可选的,它是通过 GET 方式发送给服务器的参数。Query 由一个问号开头,紧跟一个或多个“键-值对”,多个参数之间用“&”符号隔开。如本例是希望查询名为 Flink 且年龄为 20 岁的人。

URL 中还能附带更多的信息,而且有更多的用法(如发送表单信息等),本文不做展开。

写在后面

简单总结,我们使用 URI、URL 和 URN 来表示互联网上的资源。URI 可以指定资源的地址或名称,或两者。我们通常使用的是 URL,URL 的格式包括必需成分——协议域名,还可以包括许多可选成分如端口号、路径等。根据经验,一般情况下可以认为 URL 和 URI 两个缩写等价

References

  1. URIs, URLs, and URNs | Difference between URI and URL | URL Explained (已获授权)

本文地址:https://www.jeddd.com/article/distinguish-uri-url-urn.html