前言
HTTP 我打算閱讀《HTTP權(quán)威指南》,并分章節(jié)做筆記桥滨。其中會(huì)漏掉我認(rèn)為不是必要或者在那個(gè)章節(jié)還沒(méi)有仔細(xì)說(shuō)明的知識(shí)摆碉,因?yàn)楦杏X(jué)事無(wú)巨細(xì)的列出來(lái)是教科書(shū)的事。
第一章
第一章并沒(méi)啥知識(shí)點(diǎn)
MIME : HTTP傳送的數(shù)據(jù)一般會(huì)放在請(qǐng)求體中顾画,而請(qǐng)求體是二進(jìn)制的數(shù)據(jù)取劫, 所以理論上能支持眾多數(shù)據(jù)類(lèi)型。HTTP 對(duì)這些類(lèi)型做了分類(lèi)亲雪,叫做 MIME (Multipurpose Internet Mail Extension). 應(yīng)用程序如瀏覽器接受到一個(gè)數(shù)據(jù)時(shí)勇凭,就會(huì)根據(jù)不同的 MIME 做分別處理。
MIME 一般放在HTTP報(bào)文的首部中的 Content-type 中如 : Content-type: image/jpeg;
第二章 URL 與資源
URL 尋找信息所需的資源位置义辕。
URL 的組成
URL一般有9個(gè)部分(一般用不了9個(gè))
結(jié)構(gòu)如下:
<協(xié)議>://<用戶(hù)>:<密碼>@<端口號(hào)>/<路徑>;<參數(shù)>?<查詢(xún)?cè)~>#<哈希值>
自行 google 虾标,一個(gè)個(gè)的介紹說(shuō)了也記不住。
URL 快捷方式
并不是每一個(gè)URL都需要嚴(yán)格的寫(xiě)滿(mǎn)訪問(wèn)資源所需的全部信息灌砖。
這個(gè)知識(shí)點(diǎn)應(yīng)該對(duì)爬蟲(chóng)程序也有幫助璧函,因?yàn)楣ぷ鞯臅r(shí)候有個(gè)寫(xiě)爬蟲(chóng)的過(guò)來(lái)問(wèn)我相關(guān)的知識(shí)
舉個(gè)例子:
如果你在 www.baidu.com/xxx/xxx頁(yè)面中有這樣一個(gè)超鏈接
<a href="./bbb.html">./bbb.html</a>
這里的超鏈接地址是合法的。點(diǎn)擊會(huì)發(fā)現(xiàn)頁(yè)面跳轉(zhuǎn)到 www.baidu.com/xxx/bbb.html
基显。這里的./bbb.html
也是一個(gè)合法的 URL 蘸吓。 這種 URL 叫做相對(duì) URL 。但最后請(qǐng)求的 URL 也還是要是一個(gè)完整的URL吧撩幽。這就需要一套從相對(duì) URL 到完整 URL 的規(guī)則库继。請(qǐng)看下面箩艺。
基礎(chǔ) URL : 既然是相對(duì) URL ,那么相對(duì)誰(shuí)呢宪萄,相對(duì)的 URL 就叫做基礎(chǔ) URL 艺谆。
還是上面 html 為例 (寫(xiě)前端的只知道這些。拜英。)基礎(chǔ) URL 就是 www.baidu.com/xxx/bbb.html
全部静汤,全部,全部居凶。在html中有個(gè)顯示改變基礎(chǔ) URL 的標(biāo)簽 <BASE> 有印象就行了虫给,就沒(méi)遇到過(guò)(希望你不會(huì)用到,維護(hù)起來(lái)應(yīng)該摸不著頭腦)侠碧。
生成絕對(duì) URL 規(guī)則如圖:
總結(jié):
1.如果你的相對(duì) URL 帶協(xié)議的話抹估,那這個(gè)就是最終的 URL 。
2.相對(duì)URL如果非空舆床,且?guī)爸?/ ,如 '/hello'棋蚌,最終URL等于基礎(chǔ)URL路徑替換為相對(duì)URL之后的URL。如 相對(duì)URL 為 ‘/hello', 基礎(chǔ)URL為 ‘www.baidu.com/balabala/balabla'
. 那么最后生成 www.baidu.com/hello
.
3.如果上兩例都不是挨队。那么就根據(jù)相對(duì)URL 缺少的部分與基礎(chǔ)URL拼接谷暮。
如。 ‘./babba’與‘www.baidu.com/path/path2#afwe’ ,生成 www.baidu.com/path/babba
.
個(gè)人測(cè)試demo:
URL使用的編碼
當(dāng)你在 URL 輸入框輸入中文的時(shí)候盛垦,你可能發(fā)現(xiàn)你輸入的中文會(huì)變%xx%xx的形式(如果沒(méi)有湿弦,請(qǐng)按 F12 查看Network)。這說(shuō)明URL只支持部分字符腾夯。
why ?
- 有部分協(xié)議只支持ASCII 碼颊埃。如 SMTP
- URL 要求大家能看到,如果打入空格蝶俱、換行符班利、甚至是一些不可見(jiàn)的字符如/u0000 ,從網(wǎng)絡(luò)傳輸來(lái)講這不算問(wèn)題,但是對(duì)我們不太友好榨呆,畢竟看不見(jiàn)罗标。所以URL也限制了協(xié)議字符。
那么問(wèn)題來(lái)了
1.有時(shí)我們就需要用超過(guò)ASCII范文的字符积蜻,例如上例的搜索闯割,難道我們要用http報(bào)文的請(qǐng)求體來(lái)發(fā)送數(shù)據(jù)嗎,顯然太麻煩竿拆,性能也不好宙拉。
2.還記得上面的篇幅中URL的格式吧,里面有‘/','?','#’這樣的字符丙笋,如果我們就想發(fā)送這些字符呢谢澈?怎么能不混淆
how煌贴?
答案是轉(zhuǎn)譯。就是有一套規(guī)定把這些不合法的字符轉(zhuǎn)化為另一個(gè)格式澳化。
URL 的轉(zhuǎn)譯方法是使用 %% 的形式轉(zhuǎn)換崔步。
再細(xì)分兩種稳吮,一種應(yīng)對(duì)與符合編碼的非法字符 ASCII 缎谷。
如 % -> 25(ASCII) -> %25;
超過(guò)ASCII范圍的字符,因?yàn)橛貌煌木幋a有不同的結(jié)果灶似,所以沒(méi)有說(shuō)法列林。但是思路還是一樣的。以‘中‘使用Unicode為例子
中 -> 4E2D(Unicode) -> %4E%2D 酪惭。
非ASCII范圍的具體使用哪種編碼情況很多希痴,可以參考 關(guān)于URL編碼 - 阮一峰 ,但是個(gè)人感覺(jué)這種前后端約定好就行了春感,那可能考慮那么多砌创。
結(jié)語(yǔ)
第二章結(jié)束,好像沒(méi)啥知識(shí)點(diǎn)鲫懒。