IT兄弟連 JavaWeb教程 URI、URL
- 2019 年 10 月 5 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/ITXDL123/article/details/90089692
URI介紹
URI(Uniform Resource Identifier),是統一資源標識符的縮寫,是一個用於標識某一個Web資源名稱的字符串,該標識允許用戶對任何資源通過特定的協議進行交互。Web上可用的每種資源,如:HTML、圖像、視頻和音樂等資源,都由一個統一資源標識符進行標識。URI一般由三部分組成:
● 訪問資源的命名機制
● 存放資源的主機名
● 資源自身的名稱,由路徑標識,着重強調於資源
URL介紹
URL(Uniform Resource Locator),統一資源定位符的縮寫,URL是一種特殊類型的URI,包含了用於查找某個資源的全部信息。URL一般由三部分組成:
● 協議類型
● 主機的IP地址(可以包含端口號)
● 資源路徑
HTTP之URL
HTTP使用統一資源定位符URL來傳輸數據和建立連接,以下面這個URL為例,為大家介紹下URL的各部分組成:
http://www.itxdl.cn:8080/news/index.jsp?boardID=5&ID=24618&page=1#name
從上面的URL中可以看出,一個完整的URL包括以下幾部分:
● 協議部分:該URL的協議部分為「http」,這代表網頁使用的是HTTP協議,在Web中可以使用多種協議,如HTTP、FTP等等,在協議後面的「//」為分隔符。
● 域名部分:該URL的域名部分為www.itxdl.cn。一個URL中,也可以使用IP地址作為域名使用。
● 端口部分:跟在域名後面的是端口號,域名和端口號之間使用「:」作為分隔符。端口號不是一個URL必須的部分,如果省略端口號部分,將採用默認端口號。
● 虛擬目錄部分:從域名後的第一個「/」開始到最後一個「/」為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分,本例中的虛擬目錄是「/news/」。
● 文件名部分:從域名後的最後一個「/」開始到「?」位置,是文件名部分,如果沒有「?」,則從域名後的最後一個「/」開始到「#」位置,是文件名部分,如果沒有「?」和「#」,那麼從域名的最後一個「/」開始到結束,都是文件名部分。本例中的文件名是「index.jsp」。文件名也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名。
● 錨部分:從「#」開始到最後,都是錨部分。本例中的錨部分是「name」。錨部分也不是一個URL必須的部分。
● 參數部分:從「?」開始到「#」為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為「boardID=5&ID=24618&page=1」。參數可以允許有多個參數,參數與參數之間用「&」作為分隔符。
URL編碼
如果一樣東西需要編碼,那麼就說明這樣的東西並不適合進行傳輸。原因是多種做樣的,如長度過大,包含隱私數據等,對於URL來說,之所以要進行編碼,是因為URL中有些字符會引起歧義。
例如,URL中的參數使用key=value鍵值對這樣的形式來傳參,鍵值對之間以&符號分隔,如username=snape&password=123,但是如果value中的字符串包含了=或&,那麼一定會造成接收URL的服務器解析錯誤,因此必須將引起歧義的字符進行轉義,也就是進行編碼。
又如,URL中的編碼格式採用的是ASCII碼,而不是Unicode,也就是說不能在URL中包含任何非ASCII字符,例如中文。
在URL中是使用百分號編碼的形式對中文進行編碼的,因為使用百分號編碼的方式非常簡單,使用%加上兩位十六進制數值即可。URL編碼默認使用的字符集是US-ASCII,例如a在US-ASCII碼中對應的十六進制形式是0x61,那麼URL編碼之後得到的就是%61,我們在瀏覽器地址欄中輸入https://www.baidu.com/s?wd=%61,實際上就等同於在百度中搜索a了。
對於非ASCII字符,需要使用ASCII字符集的超集進行編碼得到相應的十六進制數值,然後對每個字符執行百分號編碼。對於Unicode字符,使用utf-8對其進行編碼得到相應的十六進制數值,然後對每個位元組執行百分號編碼,如「中文」使用utf-8字符集得到的十六進制形式為「0xE4 0xB8 0xAD 0xE6 0x96 0x87」,經過「URL」編碼之後得到"%E4%B8%AD%E6%96%87"。