科普:“URL”与“URI”(及URN)

“URL”与“URI”是两个在Web开发中经常提到的概念,它们之间存在一定的联系和区别。

一、定义

  1. URL(Uniform Resource Locator):统一资源定位符,用于在互联网上完整地描述网页和其他资源的位置。它提供了访问资源所需的全部信息,包括协议、主机名、端口号(可选)、路径、查询字符串(可选)和片段标识符(可选)。
  2. URI(Uniform Resource Identifier):统一资源标识符,用于唯一标识某个资源。它是一个更广泛的概念,覆盖了URL和URN(Uniform Resource Name,统一资源名称)两种形式。URI可以是抽象的或具体的,而URL则是一种具体的URI,它提供了访问资源的方法。

二、区别

  1. 功能不同

    • URL的主要功能是定位资源,它必须提供足够的定位信息,以便用户或程序能够找到并访问该资源。
    • URI的主要功能是标识资源,它可以是抽象的或具体的。URI不一定提供定位信息,但它可以唯一地标识一个资源,无论该资源是否可以在网络上被定位。
  2. 组成不同

    • URL通常由协议、主机名、端口号(可选)、路径、查询字符串(可选)和片段标识符(可选)组成。
    • URI的组成则更加灵活,它可以只包含标识符部分,也可以包含定位符部分(如URL)。URI的格式通常包括协议标识符、访问资源的名称或路径以及选项(如查询或片段)。
  3. 应用场景不同

    • URL主要应用于Web环境,用于定位Web资源。用户通过在浏览器中输入URL来访问特定的网页或资源。
    • URI则更广泛地应用于各种资源标识场景,包括Web资源、本地文件、数据库记录等。URI可以用于唯一标识任何事物,包括资源、人、物品或抽象概念。

三、联系

  • URL是URI的一种具体形式,它提供了访问资源所需的全部信息,并符合URI的标识规则。
  • URI是一个更广泛的概念,它包括了URL和URN等不同类型的资源标识符。
  • 联系:URL是URI的一种具体形式,它提供了访问资源的完整信息(包括协议、主机名、路径等)。所有URL都是URI,但不是所有URI都是URL。
  • 区别:URI是一个更广泛的概念,它包括了URL和URN等不同类型的资源标识符。URI不一定提供定位信息(如URL中的协议和主机名),但它可以唯一地标识一个资源。URL则必须提供足够的定位信息,以便用户或程序能够找到并访问该资源。

四、举例

URL 举例
  1. 网页URL
    • https://www.example.com/about-us
      • 协议:https
      • 主机名:www.example.com
      • 路径:/about-us
      • 这是一个具体的URL,它提供了访问“关于我们”页面的完整信息。
  2. 带查询参数的URL
    • https://search.example.com/results?q=data+science&sort=date
      • 协议:https
      • 主机名:search.example.com
      • 路径:/results
      • 查询参数:q=data+science&sort=date
      • 这是一个包含查询参数的URL,用于搜索“数据科学”相关的结果,并按日期排序。
URI 举例
  1. URL 作为 URI
    • https://www.example.com/about-us(同上面的URL例子)
      • 这是一个URL,同时也是一个URI,因为它唯一标识了“关于我们”页面,并提供了访问该页面的方法。
  2. URN 作为 URI
    • urn:isbn:0451450523
      • 这是一个URN(统一资源名称),它唯一标识了一本书(ISBN号为0451450523),但没有提供访问该书的具体方法(如URL中的协议、主机名和路径)。
      • 作为URI的一种,URN通常用于标识那些不依赖于位置或访问方法的资源。
  3. 抽象URI
    • example:resource123
      • 这是一个抽象的URI,它只包含了一个协议标识符(example)和一个资源标识符(resource123)。
      • 它没有提供任何关于如何访问该资源的具体信息,因此不是一个URL。但它仍然是一个有效的URI,因为它唯一标识了一个资源(在这个例子中是resource123)。

五、URN

URN(Uniform Resource Name,统一资源名称)是URI(Uniform Resource Identifier,统一资源标识符)的一种形式,用于唯一标识某个资源,但不提供该资源的网络位置信息。与URL(Uniform Resource Locator,统一资源定位符)不同,URL不仅标识资源,还提供了访问该资源的具体方法(如协议、服务器地址、路径等)。

URN的设计初衷是为了解决资源的持久性和位置无关性问题。在互联网上,资源的网络位置可能会随着时间的推移而发生变化,但URN旨在提供一个不依赖于位置、持久且稳定的资源标识符。

URN的基本语法结构包括一个“urn:”前缀,后面跟着一个命名空间标识符(NID)和一个命名空间特定字符串(NSS)。命名空间标识符用于指示URN所属的特定命名空间,而命名空间特定字符串则在该命名空间内唯一标识资源。

例如,一个URN可能看起来像这样:

urn:isbn:0-451-45052-3

在这个例子中,“urn:isbn:”是命名空间标识符,表示这个URN遵循ISBN(国际标准书号)命名空间的规则。而“0-451-45052-3”则是命名空间特定字符串,它在这个命名空间内唯一标识了一本书。

需要注意的是,尽管URN提供了持久且稳定的资源标识符,但在实际应用中,并非所有资源都有对应的URN。此外,即使资源有一个URN,也可能需要额外的信息(如URL)才能访问该资源。因此,URN通常与其他类型的URI(如URL)结合使用,以实现资源的唯一标识和访问。

总的来说,URN是URI的一种形式,用于唯一标识资源而不依赖于其网络位置。它在资源的持久性和位置无关性方面具有一定的优势,但在实际应用中可能需要与其他类型的URI结合使用。

你可能感兴趣的:(应用架构,网络)