摘要:無方案方案是規(guī)定如何訪問指定資源的主要標(biāo)識符。比如指定文檔中的某個(gè)章節(jié)。編碼機(jī)制通過轉(zhuǎn)義表示法,表示不安全字符。表示一臺指定主機(jī)上可以直接訪問的文件,省略主機(jī)名則默認(rèn)為本機(jī)由定義,訪問特定的文章或者新聞組。
URL概覽
前面提到,URL資源是HTTP協(xié)議所使用的尋找資源位置的定位符。分為三個(gè)部分,主要的結(jié)構(gòu)是:
方案://服務(wù)器/路徑
這種結(jié)構(gòu)使得網(wǎng)絡(luò)上的每一個(gè)資源都只有唯一的命名方法,從而使得瀏覽器可以統(tǒng)一對不同的資源進(jìn)行處理,而不是依賴不同的軟件。
URL可以從以下幾個(gè)部分去了解:
語法
快捷方式
特殊字符
方案
最后,我們還會展望未來,看看URN——URL的下一代。
URL語法是跟對方案而變化的,但是這些變化總是建立在URL語法的9個(gè)組件組成的通用格式之上的。這個(gè)通用格式是:
:// : @ : / ; ? #
這9個(gè)組件不需要全部包含,其中重要的三個(gè)部分是之間提到的:方案、主機(jī) 和 路徑。其可總結(jié)如下:
方案 | 描述 | 默認(rèn)值 |
---|---|---|
方案 | 使用的協(xié)議 | 無 |
用戶 | 某些方案訪問資源時(shí)要求的用戶名 | 匿名 |
密碼 | 在用戶名之后,中間以冒號:隔開 | |
主機(jī) | 服務(wù)器的主機(jī)名或者點(diǎn)分IP地址(如192.168.1.1) | 無 |
端口 | 服務(wù)器監(jiān)聽的端口,HTTP默認(rèn)端口為80 | 方案特有 |
路徑 | 服務(wù)器的資源本地名,路徑組件語法和服務(wù)器、方案相關(guān) | 無 |
參數(shù) | 使用該組件指定輸入?yún)?shù)。參數(shù)為名/值對,用分號隔開 | 無 |
查詢 | 用于激活應(yīng)用程序,沒有通用格式 | 無 |
片段 | 部分資源名稱,引用時(shí)不會傳遞給服務(wù)器,只使用于客戶端內(nèi)部。 | 無 |
方案
方案是規(guī)定如何訪問指定資源的主要標(biāo)識符。要求以字母開始,用:隔開URL其余部分,且大小寫無關(guān)。
主機(jī)和端口
主機(jī)標(biāo)志能訪問資源的服務(wù)器。主機(jī)可以使用主機(jī)名或者IP地址來訪問;端口則標(biāo)識服務(wù)器監(jiān)聽的網(wǎng)絡(luò)端口,默認(rèn)為80。
用戶名和密碼
多用在FTP服務(wù)器上。如果URL方案要求提供用戶名和密碼,而用戶沒有輸入,則應(yīng)用程序會插入一個(gè)默認(rèn)的用戶名和密碼,隨瀏覽器而定
路徑
其說明資源在服務(wù)器中的位置,是服務(wù)器定位資源時(shí)需要的信息,用/將路徑劃分為路徑段(path segment),路徑段還有各自的參數(shù)組件。
參數(shù)
服務(wù)器需要更多的信息,而不是簡單的主機(jī)名和路徑,而URL中的參數(shù)組件可以提供更多的協(xié)議參數(shù)。該組件是名值對列表,每個(gè)路徑段可以有多個(gè)參數(shù),形式類似:
http://www.baidu.com/pub/gnu;type=sb【并不存在,請勿當(dāng)真】
這里的路徑段gnu參數(shù)為type,值為sb。
查詢字符串
用于縮小請求資源類型范圍。如本專欄撰寫時(shí),網(wǎng)址為:
http://segmentfault.com/write?freshman=1
其中的freshman=1就是查詢組件。我猜測,這個(gè)查詢組件的意思是:在服務(wù)器的write路徑中,是否一直保存著我的文章的草稿。查詢組件會發(fā)送給網(wǎng)關(guān),由網(wǎng)關(guān)做進(jìn)一步處理。如果需要多個(gè)名值對,則使用&字符進(jìn)行分割。
片段
HTML資源除了資源級,還可以進(jìn)一步劃分。比如指定文檔中的某個(gè)章節(jié)。而這個(gè)就可以使用#
這個(gè)快捷方式是針對客戶端的,可以分為相對URL和URL自動(dòng)拓展。
相對URL前面提到的都是絕對URL,包含訪問資源所需要的全部信息。而相對URL則是不完整的,必須相對另一個(gè)作為基礎(chǔ)(base)的URL進(jìn)行解析。這種便捷的縮略法為寫網(wǎng)頁的人省了不少心。如下面的HTML代碼片段:
其中的問答、文章等超鏈接都是http://segmentfault.com/a/1190000004341687#articleHeader6為基礎(chǔ)URL,從而推導(dǎo)出方案和主機(jī)名。
所以,相對URL優(yōu)勢有二:
可以保持HTML文檔的可讀性和書寫便捷。
可以保持網(wǎng)頁上一組資源的便攜性。、
比如,可以在搬移一組文檔時(shí),保持鏈接的有效性。這樣,就可以方便的搭載鏡像服務(wù)器了。
使用相對URL的步驟有二:一是找出基礎(chǔ)URL;二是解析相對引用。
找出基礎(chǔ)URL
基礎(chǔ)URL來源有二:一是網(wǎng)頁顯式指定,如在HTML網(wǎng)頁中,使用
解析相對引用
對URL進(jìn)行轉(zhuǎn)換,需要將相對URL和基礎(chǔ)URL劃分成組件段,或者說“分解(decomposing)”。解析完URL后,可以獲得一個(gè)個(gè)組件,根據(jù)相對URL的完整程度,逐步對其進(jìn)行填充,直到組合成新的絕對URL。這個(gè)填充是使用的是一個(gè)在RFC2396中定義的算法。
瀏覽器會為用戶提供一條捷徑,使得用戶不需要輸入完整的URL,而交給瀏覽器填充。其方式有二:主機(jī)名拓展和歷史拓展。
主機(jī)名拓展
根據(jù)主機(jī)名進(jìn)行拓展,找到匹配站點(diǎn)則構(gòu)建成功;失敗則再次嘗試其他可能。但是這種拓展可能會為一些其他HTTP應(yīng)用程序(如代理)帶來問題。
歷史拓展
根據(jù)用戶訪問過的歷史URL進(jìn)行拓展,該拓展通過選擇來完成。
為了保障URL的可移植性(即使用任何因特網(wǎng)協(xié)議都可以安全傳輸)和完整性,URL需要:
使用通用的安全字母表
對不可見字符進(jìn)行編碼以傳送
包含不安全的字符
為了實(shí)現(xiàn)這點(diǎn),URL使用了通用字母表,并增加了一些編碼規(guī)則。
URL字符集URL中繼承了ASCII字符集和轉(zhuǎn)義序列,使得其可以使用優(yōu)先子集對任意字符值進(jìn)行編碼。
編碼機(jī)制通過“轉(zhuǎn)義”表示法,表示不安全字符。其包含一個(gè)百分號(%)和兩個(gè)表示字符ASCII碼的十六進(jìn)制數(shù)。示例如下:
字符 | ASCII碼 | 示例URL |
---|---|---|
~ | 0x7E | http://www.joes-hardware.com/%7Ejoe |
(空格) | 0x20 | http://www.joes-hardware.com/more%20tools.html |
% | 0x25 | http://www.joes-hardware.com/100%25satisfaction.html |
在URL中,字符會因?yàn)橛刑厥夂x、非ASCII可打印字符或者混淆協(xié)議和網(wǎng)關(guān)而被限制。下面是一些被限制的字符:
字符 | 保留/受限 |
---|---|
% | 保留為轉(zhuǎn)義標(biāo)志 |
/?#:; | 保留為定界符 |
. | 保留在路徑組件中使用 |
.. | 同上 |
$+ | 保留(不需要理由) |
@&= | 在不同的方案的上下文中有特殊含義,保留 |
{}[]~^"| | 用于各種傳輸Agent代理,使用受限 |
<>" | 不安全,在URL范圍之外是有意義的,需要進(jìn)行編碼 |
0x00-0x1F,0x7F | 受限,因?yàn)槭遣豢纱蛴∽址?/td> |
0x7F | 受限,因?yàn)椴辉赨S-ASCII字符集的7二進(jìn)制位范圍之內(nèi) |
對于不安全字符,最好進(jìn)行編碼。而判斷是否進(jìn)行編碼則由從用戶處獲取URL的源端應(yīng)用來做。URL中,可能有人故意對額外的字符進(jìn)行編碼,從而繞過對URL進(jìn)行模式匹配的應(yīng)用。所以,解釋URL的應(yīng)用必須在處理URL之間進(jìn)行編碼。
下面是Web常用方案的一些格式:
方案 | 描述 |
---|---|
http | 超文本傳輸協(xié)議。沒有用戶名和密碼,除此之外符合通用URL,端口默認(rèn)為80. |
https | 與http相對使用了網(wǎng)景的SSL,為HTTP提供端到端的加密機(jī)制,端口默認(rèn)為443 |
mailto | 指向E-mail地址。標(biāo)準(zhǔn)格式與URL格式不同,其語法記錄在RFC822中。 |
ftp | 文件傳輸協(xié)議、要求用戶名和密碼,可以上傳、下載文件,并獲取其目錄結(jié)構(gòu)內(nèi)容 |
rtsp,rtspu | 通過實(shí)時(shí)流傳輸協(xié)議解析的多媒體資源標(biāo)識符。除了方案部分,其余同上。 |
file | 表示一臺指定主機(jī)上可以直接訪問的文件,省略主機(jī)名則默認(rèn)為本機(jī) |
news | 由RFC036定義,訪問特定的文章或者新聞組。其自身包含的信息不足以對資源進(jìn)行定位,其實(shí)際上與位置無關(guān),只保留字符@來區(qū)分指向新聞組和指向新聞文章的URL |
telnet | 訪問交互式業(yè)務(wù),表示可以通過telnet訪問的交互式應(yīng)用程序 |
實(shí)際上,由于URL表示的實(shí)際的地址,所以在資源被移動(dòng)以后,無法定位對象。所以,下一代標(biāo)準(zhǔn)URN(統(tǒng)一資源名)開始研究,通過一個(gè)永久統(tǒng)一資源定位符PURL,使用URL實(shí)現(xiàn)URN的功能。可以在PURL中獲取更多信息。
最后的彩蛋,猜猜這個(gè)是哪個(gè)網(wǎng)頁的源代碼?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/49732.html
摘要:其中負(fù)載均衡那一節(jié),基本上是參考的權(quán)威指南負(fù)載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由騰訊IVWEB團(tuán)隊(duì) 發(fā)表于云+社區(qū)專欄作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學(xué)習(xí)路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...
摘要:其中負(fù)載均衡那一節(jié),基本上是參考的權(quán)威指南負(fù)載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。 歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由騰訊IVWEB團(tuán)隊(duì) 發(fā)表于云+社區(qū)專欄作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學(xué)習(xí)路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹...
摘要:其中負(fù)載均衡那一節(jié),基本上是參考的權(quán)威指南負(fù)載均衡的內(nèi)容。開發(fā)指南讀了一半,就是看這本書理解了的事件循環(huán)。哈哈創(chuàng)京東一本騙錢的書。歡迎大家前往騰訊云+社區(qū),獲取更多騰訊海量技術(shù)實(shí)踐干貨哦~ 本文由騰訊IVWEB團(tuán)隊(duì)發(fā)表于云+社區(qū)專欄 作者:link 2014年一月以來,自己接觸web前端開發(fā)已經(jīng)兩年多了,記錄一下自己前端學(xué)習(xí)路上看過的,以及道聽途說的一些書,基本上按照由淺入深來介紹。...
閱讀 2436·2019-08-30 15:52
閱讀 2237·2019-08-30 12:51
閱讀 2833·2019-08-29 18:41
閱讀 2812·2019-08-29 17:04
閱讀 811·2019-08-29 15:11
閱讀 1720·2019-08-28 18:02
閱讀 3603·2019-08-26 10:22
閱讀 2510·2019-08-26 10:12