繁體中文(香港)
  • uri
  • url
  • urn

揭示 URI、URL 和 URN

本指南提供 URI、URL 與 URN 的概覽,解釋它們的區別和使用場景。

Darcy Ye
Darcy Ye
Developer

在開發網頁應用程式時,我們經常需要調用不同的網頁服務。在配置不同的網頁服務的通信和連接時,我們常常會遇到 URI、URL 和 URN 的概念。通常,使用者很難區分它們,導致混淆或不正確的使用。在本文中,我們將提供範例並解釋它們之間的區別,幫助大家更好地理解這些概念,並在閱讀技術博客、文件或與其他工程師交流時,正確解讀和使用它們。

什麼是 URL?

URL(統一資源定位符)提供了網絡上的資源地址或位置。它通常被用於指定網頁、文件或服務的位置。URL 提供了一種標準化的格式來訪問網絡上的資源。它是網頁瀏覽、鏈接和互聯網交流的重要組成部分。

URL 由幾個部分組成,這些部分共同定義了資源的地址和訪問它所使用的協議。讓我們解析下面的 URL 作為例子,並逐一解釋每個部分的功能。

  1. Scheme(協議): 這指定了用於訪問資源的協議或方案,例如 HTTP(超文本傳輸協議)、HTTPS(HTTP 安全)、FTP(文件傳輸協議)或其他

    URL 中的協議是 https

  2. Host(主機): 主機指定了承載資源的服務器的域名或 IP 地址。

    URL 中的主機是 example.logto.io

  3. Port(端口):(可選)端口表示在主機上訪問資源的具體端口號。如果未指定端口,則默認為給定協議的標準端口。

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

    URL 中的端口是 8080

  4. Path(路徑):(可選)路徑指示服務器上資源的具體位置或目錄,其中可以包括目錄和文件名。

    URL 中的路徑應該是 /blogs/index.html

  5. Query Parameters(查詢參數):(可選)查詢參數是傳遞給資源的附加參數,通常用於動態網頁應用程式。它們出現在路徑之後,並以 ? 符號分隔。

    URL 中的查詢參數是 params1=value1&param2=value2,通常以鍵值對的形式表示,鍵和值之間用 & 分隔。在實際使用場景中,通常需要進行編碼以避免空格等字符。

  6. Fragment Identifier(片段標識符):(可選)它也可以稱為錨點,用於定位資源中的特定位置。

    URL 中的錨點是 #introduction

此外,例如,使用文件服務或許多網頁上的“聯絡我們”按鈕都會鏈接到 URL,例如:

  • ftp://documents.logto.io/files/legal/soc_ii.pdf
  • mailto:[email protected]?subject=Enterprise%20quota%20request

什麼是 URI?

URI 是“統一資源標識符”的縮寫。它是一串識別特定資源(例如網頁、文件或服務)的字符。URI 提供了一種使用標準格式唯一識別和定位資源的方法。

URI 主要由兩個組件組成:

  1. Scheme(協議): 指示用於訪問資源的協議或方案。
  2. Resource Identifier(資源標識符): 識別所訪問或引用的特定資源。資源標識符的格式取決於所使用的協議。

從語法角度來看,URI 大多數遵循與 URL 相同的格式,正如 RFC 3986 中所規定的。

雖然這種 URI 格式類似於 URL,但它不保證能訪問網絡上的任何資源。使用此格式可以減少命名空間名稱衝突。

在上面的部分中,我們介紹了 URL,它不僅可以識別一個資源,還能幫助定位該資源。因此,實際上,URL 是 URI 的一個真正子集。

什麼是 URN?

URN 可能不如 URL 和 URI 普及。它代表“統一資源名”,其範圍是在資源不再存在時也能持久地識別資源。

與 URL 不同,URN 不提供任何關於如何定位資源的信息;它僅僅是識別它,就像一個純 URI 一樣。具體來說,URN 是一種使用“urn”方案的 URI,其結構如下所述,參見 RFC 2141

<URN>:<NID>:<NSS>

  1. URN: 通常是 urn
  2. Namespace Identifier (NID): 代表唯一的命名空間或標識符系統,用於定義和管理 URN。它提供上下文並確保標識符的唯一性。命名空間的例子包括 ISBN(國際標準書號)等。
  3. Namespace Specific String (NSS): 它是一個字符串,用於在指定的命名空間內唯一標識資源。標識符本身不傳達任何有關資源位置或訪問方法的信息。

例如,一本非常著名的計算機系統介紹書 CSAPP 的 ISBN 號被表示為 URN urn:isbn:9780134092669

URNs 常用於各種標準協議中,例如 SAML 協議中的 assertion,對應於 URN urn:oasis:names:tc:SAML:2.0:assertion

在軟件工程中,我們還可以根據 URN 命名規則為我們自己系統的特定目的定義 URN。例如,在 Logto 中,要啟用組織功能,你需要在使用 SDK 時在配置中添加 urn:logto:scope:organizations 範圍。每個組織也有自己專用的 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。