【思考】URI和URL的區別?以及URL的結構

Nemo&發表於2020-06-27

URI = Universal Resource Identifier
URL = Universal Resource Locator

在學習中,我們難免會遇到 URI 和 URL,有時候都傻傻分不清,為啥這邊是 URI 那邊又是 URL,這兩者到底有什麼區別呢?

我們從名字上看

  • 統一資源識別符號(Uniform Resource Identifier, URI):是一個用於標識某一網際網路資源名稱的字串。
  • 統一資源定位符(Uniform Resource Locator, URL):是一個用於標識和定位某一網際網路資源名稱的字串。

可能大家就比較困惑了,這倆好像是一樣的啊?那我們就類比一下我們現實生活中的情況:
我們要找一個人——張三,我們可以通過他的唯一的標識來找,比如說身份證,那麼這個身份證就唯一的標識了一個人,這個身份證就是一個 URI
而要找到張三,我們不一定要用身份證去找,我們還可以根據地址去找,如 在清華大學18號宿舍樓的404房間第一個床鋪的張三,我們也可以唯一確定一個張三,
動物住址協議://地球/中國/北京市/清華大學/18號宿舍樓/404號寢/張三.人。而這個地址就是我們用於標識和定位的 URL
我們從上面可以很明顯的看出,URI 通過任何方法標識一個人即可,而 URL 雖然也可以標識一個人,但是它主要是通過定位地址的方法標識一個人,所以 URL 其實是 URI 的一個子集,即 URL 是靠標識定位地址的一個 URI

Url 的構成

URL(Uniform Resource Locator,統一資源定位符),用於定位網路上的資源,每一個資訊資源都有統一的且在網上唯一的地址。

Url一般有以下部分組成
scheme://host:port/path?query#fragment

Scheme: 通訊協議,一般為http、https等;
Host: 伺服器的域名主機名或ip地址;
Port: 埠號,此項為可選項,預設為80;
Path: 目錄,由“/”隔開的字串,表示的是主機上的目錄或檔案地址;
Query: 查詢,此項為可選項,可以給動態網頁傳遞引數,用“&”隔開,每個引數的名和值用“=”隔開;
Fragment: 資訊片段,字串,用於指定網路資源中的某片斷;


其實,把 URL 說成是網址其實是很不嚴謹的說法,因為 URL 有很嚴格的結構,表示也很靈活、有彈性。
RFC 3986: Uniform Resource Identifier (URI): Generic SyntaxSyntax Components 把 URL 描述為如下圖:

【思考】URI和URL的區別?以及URL的結構

如圖所示,把 URL 分成幾個部分,這樣便可以瞭解URL的構成。 在 URI scheme - Wikipedia 頁面中對 URL 的描述更為詳細,如下圖:
【思考】URI和URL的區別?以及URL的結構

相關文章