1. 程式人生 > 其它 >URL, URI, URN 的聯絡

URL, URI, URN 的聯絡

0 基本概念
URL(Uniform Resource Locator)統一資源定位符,表示的是資源位置,期望提歐共資源查詢方法。如瀏覽器重使用的URL
URI(Uniform Resource Identifier)統一資源識別符號,用於區分資源,是URL和URN超集合,用於取代URL和URN。
URN(Uniform Resource Name)是統一資源標識(URI)的歷史名字。期望為資源提供持久的、位置無關的標識方式,並允許簡單地將多個命名對映到單個URN名稱空間。例如磁力連結:magnet:?xt=urn:btih:;

URI 三個關鍵字
● Resource(資源),可以是圖片、文件、今天杭州溫度等、也可以不能通過網際網路訪問的實體,例如人、公司、實體書,也可以抽象的概念,例如親屬關係或者數字符號。
● Identifier(識別符號) ,將當前資源與其他資源區分開的名稱。
● Uniform (統一)允許不同種類的資源在同一上下文出現(比如一個html 可以有圖片、視訊),對不同種類的的資源識別符號可以使用同一語義進行解讀(比如下載PDF和視訊可以用一種下載方式),引入新識別符號時,不會對已有識別符號產生影響,允許同一資源識別符號在不同的Internet規模上下文出現。

1 URI格式
URI 的組成:schema、user information、host、port、path、query、fragment,他的格式定義如下:


● scheme (必要):URI使用的方案,比如FTP、HTTP、file
● hierarchical part 分層部分(必要):URI 指向資源的識別資訊。這些是被資訊以分層的形式組織起來。
● query 查詢引數(可選):以 ?開頭查詢函式是可選的;多個查詢函式將由多個鍵值對對應表示,這些鍵值對之間通過 & 號進行連線。
● fragment 分段(可選):以# 開頭分段是可選的,用於URI指向資源的次級資源進行標記,如#page-3(指向第三頁),由客戶端進行處理。

具體示例:https://datatracker.ietf.org/doc/html/rfc7231?test=1#page-3(指向某個段落)

2 URI編碼
2.1 為什麼要編碼
URI設計者使用US-ASCII字符集表示URI,原因也是ASCII比較簡單;所有的系統都支援ASCII。
https://www.baidu.com/s?&wd=中國,這裡中國不屬於ASCII,如果不進行編碼,伺服器無法處理(在瀏覽器訪問瀏覽器會做處理)。編碼後效果如下
https://www.baidu.com/s?&wd=%E4%B8%AD%E5%9B%BD
對可能產生歧義的資料進行編碼:
● 不在ASCII範圍內,如中文
● ASCII不可見字元
● URI規定的保留字元
● 不安全字元(傳輸環節中可能會被不正確處理)如空格、引號、尖括號等


2.2 編碼方式
● 百分號編碼方式:pct-encoded=%HEXHIGHEXHIG(一個百分號和兩個16進位制數字0-F),HEXHIG是十六進位制的字母,大小寫等價。
● 非ASCII碼字元,如中文,建議先UTF-8編碼,在US-ASCII編碼
● 對URI合法字元,編碼和不編碼是等價的

https://www.baidu.com/s?&wd=中國 編碼後的結果:https://www.baidu.com/s?&wd=%E4%B8%AD%E5%9B%BD

參考文獻[1]極客時間,陶輝,Web協議詳解與抓包實戰
————————————————
版權宣告:本文為CSDN博主「huangshanchun」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/huangshanchun/article/details/123776841