1. 程式人生 > >【思考】URI和URL的區別?以及URL的結構

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

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 Syntax](http://tools.ietf.org/html/rfc3986) 的 [Syntax Components](http://tools.ietf.org/html/rfc3986#section-3) 把 URL 描述為如下圖: ![](https://img2020.cnblogs.com/blog/1542615/202006/1542615-20200621205948051-1435006716.png) 如圖所示,把 URL 分成幾個部分,這樣便可以瞭解URL的構成。 在 [URI scheme - Wikipedia](http://en.wikipedia.org/wiki/URI_scheme) 頁面中對 URL 的描述更為詳細,如下圖: ![](https://img2020.cnblogs.com/blog/1542615/202006/1542615-20200621210030686-18404436