統一資源定位符(英語:Uniform Resource Locator,常縮寫為URL),俗稱網址。
如同在網絡上的門牌,是因特網上標準的資源的地址(Address)。
相關定義:
URI,是uniform resource identifier,統一資源標識符,用來唯一的標識一個資源。
URN,uniform resource name,統一資源命名,是通過名字來標識資源,比如mailto:java-net@java.sun.com。
統一資源定位符的標準格式如下:
協議類型:[//服務器地址[:端口號]][/資源層級UNIX文件路徑]文件名[?查詢][#片段ID]
統一資源定位符的完整格式如下:
協議類型:[//[訪問資源需要的憑證信息@]服務器地址[:端口號]][/資源層級UNIX文件路徑]文件名[?查詢][#片段ID]
HTTP
超文本傳輸協議([HTTP])的統一資源定位符將從因特網獲取信息的五個基本元素包括在一個簡單的地址中:
1.? 傳送協議。Data URI scheme
2.? 層級URL標記符號(為[//],固定不變)
3.? 訪問資源需要的憑證信息(可省略)
4.? 服務器。(通常為域名,有時為IP地址)
5.? 端口號。(以數字方式表示,若為HTTP的默認值“:80”可省略)
6.? 路徑。(以“/”字符區別路徑中的每一個目錄名稱)
7.? 查詢。(GET模式的窗體參數,以“?”字符為起點,每個參數以“&”隔開,再以“=”分開參數名稱與數據,通常以UTF8的URL編碼,避開字符沖突的問題)
8.? 錨點、片段。以“#”字符為起點
iOS的URL屬性對應的部分總覽:
https://lzy:521@www.zuzuche.com:8080/trip/index.asp?boardID=5&ID=24618&page=1#name
scheme://user:password@host:port/path?query#fragment
absoluteString對應完整的URL String。
relative-代表,除掉baseURL的其他部分。
現在以下面的URL為例,講解一下組成部分以及iOS所對應的屬性
http://www.zuzuche.com:8080/trip/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分(Scheme):該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP,HTTPS等等本例中使用的是HTTP協議。在"HTTP"后面的“//”為分隔符
url.scheme = http;
2.域名部分:該URL的域名部分為“www.zuzuche.com”。一個URL中,也可以使用IP地址作為域名使用(如:10.20.1.2)
url.host = www.zuzuche.com
3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口
url.port = 8080
4.虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/trip/”
?? 文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名
iOS中并沒有區分虛擬目錄和文件名,而是統一處理
url.path = /trip/index.asp
5.錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
url.fragment = name
6.參數部分:從“?”開始到“#”為止之間的部分為參數部分,又稱搜索部分、查詢部分。本例中的參數部分為“boardID=5&ID=24618&page=1”。參數可以允許有多個參數,參數與參數之間用“&”作為分隔符。
注意:#代表網頁中的一個位置。其右面的字符,就是該位置的標識符。
#是用來指導瀏覽器動作的,對服務器端完全無用。所以,HTTP請求中不包括#。
query = boardID=5&ID=24618&page=1