繁體中文(台灣)
  • 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(安全超文本傳輸協議)、FTP(文件傳輸協議)或其他

    URL 中的 scheme 是 https

  2. Host: Host 指定了主機的域名或 IP 地址,該主機承載資源。

    URL 中的 host 是 example.logto.io

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

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

    URL 中的 port 是 8080

  4. Path:(可選)Path 指示伺服器上資源所在的具體位置或目錄,可以包含目錄和文件名。

    URL 中的 path 應該是 /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 是一種類型的 URI,其方案是 "urn",其結構如下所述 RFC 2141

<URN>:<NID>:<NSS>

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

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

URNs 經常用於各種標準協議中,例如在 SAML 協議中的斷言,對應於 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 方案。

所有的 URLs 或 URNs 都是 URIs,但不是所有的 URIs 都是 URLs 或 URNs。