女朋友看了會生氣的回答 URI和URL有什麼區別?
阿新 • • 發佈:2021-03-02
### URL是什麼
**URL** 代表著是統一資源定位符(**U**niform **R**esource **L**ocator)。作用是為了告訴使用者 某個資源在 Web 上的地址。這個資源可以是一個 HTML 頁面,一個 CSS 文件,一幅影象或一個貓片等等。上面我們請求貓片的URL就是
`https://upos-sz-staticks3.bilivideo.com/cmaskboss/164203142_30_1.jpg`
這裡面細分,又可以分為好幾個部分。
- 協議部分
表示該URL的協議部分為**http還是https**,會用**//**為分隔符。上面的URL表示網頁用的是**HTTPS**協議,而上面提到的X影天堂用的則是**ftp**協議的下載連結。
- 域名部分
域名是`upos-sz-staticks3.bilivideo.com`,在傳送請求前,會向DNS伺服器解析IP。如果已經知道ip,還可以跳過DNS解析那一步,直接把IP當做域名部分使用。
- 埠部分
域名後面有些時候會帶有埠,和域名之間用:分隔,埠不是一個URL的必須的部分。當網址為**http://**時,預設埠為**80**
當網址為**https://**時,預設埠為**443**,以上兩種都可以省略埠號。上面的URL其實**省略了443埠**號。
- 虛擬目錄
從域名的第一個/開始到最後一個/為止,是虛擬目錄的部分。虛擬目錄也不是URL必須的部分,本例中的虛擬目錄是`/cmaskboss/`
- 檔名部分
從域名最後一個/開始到?為止,是檔名部分;如果沒有?,則是從域名最後一個/開始到#為止,是檔名部分;如果沒有?和#,那麼就從域名的最後一個/從開始到結束,都是檔名部分。本例中的檔名是`164203142_30_1.jpg`,檔名也不是一個URL的必須部分。
### URI是什麼
**URI** 代表著統一資源識別符號(**U**niform **R**esource **I**dentifier),用於標識某一網際網路資源名稱。 該種標識允許使用者對任何包括**本地和網際網路**的資源通過特定的協議進行互動操作。比如上面**URL**中的 `164203142_30_1.jpg`。
### URL 和 URI 的區別
- **URL**:Uniform Resource Locator **統一資源定位符**;
- **URI**: Uniform Resource Identifier **統一資源識別符號**;
其實一直有個誤解,很多人以為URI是URL的子集,其實應該反過來。**URL是URI的子集**才對。簡單解釋下。
假設"小白"(URI)是一種資源,而"在迪麗亦巴的懷裡"表明了一個位置。如果你想要找到(locate)小白,那麼你可以到"在迪麗亦巴懷裡"找到小白,而"在迪麗亦巴懷裡的/小白"才是我們常說的URL。而"在迪麗亦巴懷裡的/小白"(URL)顯然是"小白"(URI)的子集,畢竟,"小白"還可能是"在牛亦菲懷裡的/小白"(其他URL)。
###### 如果你想每天學習一個知識點?
關注公眾號:【golang小白成長記】
![](https://cdn.jsdelivr.net/gh/zhaolunallen/picture/2021-1-6/1609890496881-%E9%BB%98%E8%AE%A4%E6%96%87%E4%BB%B61609890361642.png)