跳转到内容
View in the app

A better way to browse. Learn more.

彼岸论坛

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

[程序员] 什么是 URI, URL 和 URN?

发表于

在开发 Web 应用时,我们经常需要调用不同的服务。在配置不同服务的通信和连接时,我们经常遇到 URI 、URL 和 URN 的概念。通常,用户很难区分它们,导致混淆或错误的使用。在本文中,我们将通过实例解释它们之间的区别,帮助大家更好地理解这些概念,并在阅读技术博客、文档或与其他工程师交流时正确地解读和使用它们。

什么是 URL ?

URL (统一资源定位符)提供了互联网上资源的网络地址或位置。它通常用于指定网页、文件或服务的位置。URL 提供了一种标准化的格式来访问网络上的资源。它是网络浏览、链接和互联网通信的关键组成部分。

URL 由几个部分组成,这些部分一起定义了资源的地址和用于访问它的协议。让我们解析下面的 URL 作为例子,一一解释每个部分的功能。

https://example.logto.io:8080/blogs/index.html?param1=value1&param2=value2#introduction
  1. Scheme: 指定了用于访问资源的协议或方案,如 HTTP (超文本传输协议)、HTTPS (安全的 HTTP )、FTP (文件传输协议)或 其他

    此 URL 中的 scheme 是 https

  2. Host: 主机指定了托管资源的服务器的域名或 IP 地址。

    此 URL 中的 host 是 example.logto.io

  3. Port: (可选)端口表示在主机上访问资源的特定端口号。如果没有指定端口,它默认为给定方案的标准端口。

    HTTP 的默认端口是 80 ,而 HTTPS 的默认端口是 443 。

    此 URL 中的 port 是 8080

  4. Path: (可选)路径指示服务器上资源所在的特定位置或目录,可以包括目录和文件名。

    此 URL 中的 path 应为 /blogs/index.html

  5. Query parameters: (可选)查询参数是传递给资源的额外参数,通常用于动态网络应用。它们出现在路径之后,由 ? 符号分隔。

    此 URL 中的 query parameters 是 params1=value1&param2=value2,通常以键值对的形式表示,对之间由 & 符号分隔。在实际使用场景中,通常需要编码以避免空格等字符。

  6. Fragment identifier: (可选)它也可以被称为锚,用于定位资源中的特定位置。

    此 URL 中的锚是 #introduction

此外,使用文件服务或许多网页上的 "联系我们" 按钮都链接到 URL ,例如:

什么是 URI ?

URI 代表 "统一资源标识符"。它是一个字符串,用于标识特定的资源,如网页、文件或服务。URI 提供了一种使用标准化格式唯一标识和定位资源的方法。

URI 主要由两个组成部分组成:

  1. Scheme: 指示用于访问资源的协议或方案。
  2. Resource identifier: 标识正在访问或引用的特定资源。资源标识符的格式取决于使用的方案。

从语法角度看,URI 大多遵循 URL 的相同格式,如 RFC 3986 中所述。

尽管这种 URI 格式与 URL 的相似,但它并不能保证访问 Web 上的所有资源。使用这种格式可以减少命名空间名称冲突。

在上面的部分中,我们介绍了 URL ,它不仅标识资源,还帮助定位资源。所以,实际上,URL 是 URI 的一个适当的子集。

什么是 URN ?

URN 可能不如 URL 和 URI 常见。它代表 "统一资源名称",其范围是以持久的方式标识资源,即使这些资源不再存在。

与 URL 不同,URN 不提供任何关于如何定位资源的信息;它只是标识它,就像一个纯 URI 一样。具体来说,URN 是一种带有 "urn" 方案的 URI ,其结构如 RFC 2141 中所述:

<URN>:<NID>:<NSS>

  1. URN: 通常为 urn
  2. 命名空间标识符( NID ): 代表一个唯一的命名空间或标识符系统,定义和管理 URN 。它提供上下文,并确保标识符的唯一性。命名空间的例子包括 ISBN (国际标准书号)等。
  3. 命名空间特定字符串( NSS ): 它是一个字符串,唯一地在指定的命名空间内标识一个资源。标识符本身并不传达任何关于资源位置或访问方法的信息。

例如,一本非常著名的介绍计算机系统的书 CS: APP 的 ISBN 号表示为 URN urn:isbn:9780134092669

URN 经常用于各种标准协议中,如 SAML 协议中的断言,对应于 URN urn:oasis:names:tc:SAML:2.0:assertion

在软件工程中,我们也可以根据 URN 命名规则为我们自己的系统中的特定目的定义 URN 。例如,在 Logto 中,要启用 Organization ,你需要在使用 SDK 时在配置中添加 urn:logto:scope:organizations 这个 scope 。每个 Organization 也有自己的专用 URN urn:logto:organization:{orgId}

结论

URI 、URL 和 URN 之间的关系可以用以下的文氏图来说明:

关系图

URI 、URL 和 URN 都可以用来标识不同的资源,但只有 URL 可以精确地定位资源的位置。

URI 和 URL 可以支持各种方案,如 HTTP 、HTTPS 、FTP ,但 URN 可以被认为只支持 urn 方案。

所有的 URL 或 URN 都是 URI ,但并非所有的 URI 都是 URL 或 URN 。


如果有任何想法,欢迎大家讨论。更多文章请见我们的 博客

Featured Replies

No posts to show

创建帐户或登录来提出意见

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.