當(dāng)你在瀏覽器中輸入一個網(wǎng)址铝阐,瀏覽器的處理過程如下:
第一步 瀏覽器查找該域名的 IP 地址
第二步 瀏覽器根據(jù)解析得到的IP地址向 web 服務(wù)器發(fā)送一個 HTTP 請求
第三步 服務(wù)器收到請求并進(jìn)行處理
第四步 服務(wù)器返回一個響應(yīng)
第五步 瀏覽器對該響應(yīng)進(jìn)行解碼,渲染顯示铐拐。
第六步 頁面顯示完成后徘键,瀏覽器發(fā)送異步請求。
下面對每個環(huán)節(jié)做進(jìn)一步分析:
01 瀏覽器查找該域名的 IP 地址
瀏覽器緩存 首先是查找瀏覽器緩存,瀏覽器會緩存DNS記錄一段時間遍蟋,不同瀏覽器保存的時常不等(2分鐘到30分鐘不等)吹害。
系統(tǒng)緩存 如果在瀏覽器緩存里沒有找到需要的記錄,瀏覽器會做一個系統(tǒng)調(diào)用來查找這個網(wǎng)址的對應(yīng)DNS信息虚青。
路由器緩存 如果在系統(tǒng)緩存里沒有找到找到對應(yīng)的IP它呀,請求會發(fā)向路由器,它一般會有自己的DNS緩存。
ISP DNS服務(wù)器 如果在路由器緩存里還是沒有對應(yīng)的IP纵穿,請求會被發(fā)送到ISP下隧。
根域名服務(wù)器 如果還是沒有,請求將發(fā)向根域名服務(wù)器進(jìn)行搜索谓媒。找不到就說明此域名不存在淆院。
02 瀏覽器根據(jù)解析得到的IP地址向 web 服務(wù)器發(fā)送一個 HTTP 請求
可能會重定向響應(yīng)
例如“[http://facebook.com/](http://facebook.com/)”,服務(wù)器會給瀏覽器響應(yīng)一個301永久重定向響應(yīng)句惯,這樣瀏覽器就會訪問“[http://www.facebook.com/](http://www.facebook.com/)” 而非“[http://facebook.com/](http://facebook.com/)”土辩。
服務(wù)器重定向的原因有很多,舉其中兩個:
一:跟搜索引擎排名有關(guān)抢野。你看拷淘,如果一個頁面有兩個地址,就像“[http://www.facebook.com/](http://www.facebook.com/)” 和“[http://facebook.com/](http://facebook.com/)”指孤。搜索引擎會認(rèn)為它們是兩個網(wǎng)站启涯,結(jié)果造成每一個的搜索鏈接都減少從而降低排名。
二:不同的地址會造成緩存友好性變差恃轩。當(dāng)一個頁面有好幾個名字時逝嚎,它可能會在緩存里出現(xiàn)好幾次。
然后瀏覽器會跟蹤重定向地址
瀏覽器會發(fā)送另一個獲取請求到”[http://www.facebook.com/](http://www.facebook.com/)”详恼。
過程:
通過DNS獲取到IP后补君,目標(biāo)IP和本機(jī)IP分別與子網(wǎng)掩碼相與的結(jié)果相同,那么它們在一個子網(wǎng)昧互,那么通過ARP協(xié)議可以查到目標(biāo)主機(jī)的MAC地址挽铁,否則的話,需要通過網(wǎng)關(guān)轉(zhuǎn)發(fā)敞掘,也就是目標(biāo)MAC是網(wǎng)關(guān)的MAC情臭。
請求需要進(jìn)行編碼芒炼,生成一個HTTP數(shù)據(jù)包癌瘾,依次打上TCP记劈、IP、以太網(wǎng)協(xié)議的頭部赫冬。其中TCP頭部主要信息是本機(jī)端口和目標(biāo)端口號等信息浓镜,用于標(biāo)識同一個主機(jī)的不同進(jìn)程,對于HTTP協(xié)議劲厌,服務(wù)器端的默認(rèn)端口號是80膛薛,本機(jī)瀏覽器的話生成一個1024到65535之間的端口號。IP頭部主要包含本地IP和目標(biāo)IP等信息补鼻。以太網(wǎng)協(xié)議頭部主要是雙方的MAC地址哄啄,目標(biāo)MAC可以由第一條所訴方法得到雅任。以太網(wǎng)數(shù)據(jù)包的數(shù)據(jù)部分,最大長度為1500字節(jié)咨跌,所以如果IP包太大的話還要拆包沪么,比如IP包5000字節(jié),要分為4包锌半,每一包都包含一個IP頭部成玫。
03 服務(wù)器收到請求并進(jìn)行處理
負(fù)載均衡
網(wǎng)站可能會有負(fù)載均衡設(shè)備來平均分配所有用戶的請求。
負(fù)載均衡拳喻,即對工作任務(wù)進(jìn)行平衡,分?jǐn)偟蕉鄠€操作單元上執(zhí)行猪腕,如圖片服務(wù)器冗澈,應(yīng)用服務(wù)器÷希可分為鏈路負(fù)載均衡亚亲,集群負(fù)載均衡,操作系統(tǒng)負(fù)載均衡
集群負(fù)載均衡又分為硬件負(fù)載均衡和軟件負(fù)載均衡腐缤。
CDN
請求的數(shù)據(jù)可能存儲在分布式緩存捌归、靜態(tài)文件或者數(shù)據(jù)庫中。如果請求的數(shù)據(jù)是靜態(tài)文件岭粤,如果在CDN上惜索,那么CDN服務(wù)器又會處理這個用戶的請求。如果在數(shù)據(jù)庫中需要向數(shù)據(jù)庫發(fā)起查詢請求剃浇。
04 服務(wù)器返回一個響應(yīng)
過程:
服務(wù)器返回一個 HTTP 響應(yīng)巾兆,如果返回狀態(tài)碼304,瀏覽器可以直接使用之前緩存的資源虎囚。對于內(nèi)容響應(yīng)角塑,瀏覽器需要進(jìn)行響應(yīng)解碼,渲染顯示淘讥。
05 瀏覽器對該響應(yīng)進(jìn)行解碼圃伶,渲染顯示。
過程:
在瀏覽器沒有完整接受全部HTML文檔時蒲列,它就已經(jīng)開始顯示這個頁面了窒朋,如果是個靜態(tài)的頁面,拿到此就基本結(jié)束了蝗岖。如果是是動態(tài)的炼邀,那么在瀏覽器顯示HTML時,會獲取嵌入在HTML中的對象剪侮,瀏覽器會發(fā)送獲取請求來重新獲得這些文件拭宁。這些請求都要經(jīng)歷一個和HTML讀取類似的過程洛退。
對于靜態(tài)的頁面內(nèi)容,瀏覽器通常會進(jìn)行緩存杰标,而對于動態(tài)的內(nèi)容兵怯,瀏覽器通常不會進(jìn)行緩存。
06 頁面顯示完成后腔剂,瀏覽器發(fā)送異步請求媒区。
過程:
頁面顯示完成后客戶端仍與服務(wù)器端保持著聯(lián)系。
它會持續(xù)與服務(wù)器保持聯(lián)系來及時更新一些頁面信息掸犬。在瀏覽器中執(zhí)行的 JavaScript代碼會給服務(wù)器發(fā)送異步請求袜漩。這個異步請求發(fā)送給特定的地址,它是一個按照程式構(gòu)造的獲取或發(fā)送請求湾碎。
相關(guān)擴(kuò)展:
ARP原理
01 每個主機(jī)都會在自己的ARP緩沖區(qū)中建立一個ARP列表宙攻,以表示IP地址和MAC地址之間的對應(yīng)關(guān)系。
02 當(dāng)源主機(jī)要發(fā)送數(shù)據(jù)時介褥,首先檢查ARP列表中是否有對應(yīng)IP地址的目的主機(jī)的MAC地址座掘,如果有,則直接發(fā)送數(shù)據(jù)柔滔,如果沒有溢陪,就向本網(wǎng)段的所有主機(jī)發(fā)送ARP數(shù)據(jù)包,該數(shù)據(jù)包包括的內(nèi)容有:源主機(jī) IP地址睛廊,源主機(jī)MAC地址形真,目的主機(jī)的IP 地址。
03 當(dāng)本網(wǎng)絡(luò)的所有主機(jī)收到該ARP數(shù)據(jù)包時超全,首先檢查數(shù)據(jù)包中的IP地址是否是自己的IP地址没酣,如果不是,則忽略該數(shù)據(jù)包卵迂,如果是裕便,則首先從數(shù)據(jù)包中取出源主機(jī)的IP和MAC地址寫入到ARP列表中,如果已經(jīng)存在见咒,則覆蓋偿衰,然后將自己的MAC地址寫入ARP響應(yīng)包中,告訴源主機(jī)自己是它想要找的MAC地址改览。
04 源主機(jī)收到ARP響應(yīng)包后下翎。將目的主機(jī)的IP和MAC地址寫入ARP列表,并利用此信息發(fā)送數(shù)據(jù)宝当。如果源主機(jī)一直沒有收到ARP響應(yīng)數(shù)據(jù)包视事,表示ARP查詢失敗。
RARP原理
RARP是逆地址解析協(xié)議庆揩,作用是完成硬件地址到IP地址的映射俐东,主要用于無盤工作站跌穗,因?yàn)榻o無盤工作站配置的IP地址不能保存。
工作流程:在網(wǎng)絡(luò)中配置一臺RARP服務(wù)器虏辫,里面保存著IP地址和MAC地址的映射關(guān)系蚌吸,當(dāng)無盤工作站啟動后,就封裝一個RARP數(shù)據(jù)包砌庄,里面有其MAC地址羹唠,然后廣播到網(wǎng)絡(luò)上去,當(dāng)服務(wù)器收到請求包后娄昆,就查找對應(yīng)的MAC地址的IP地址裝入響應(yīng)報文中發(fā)回給請求者佩微。因?yàn)樾枰獜V播請求報文,因此RARP只能用于具有廣播能力的網(wǎng)絡(luò)萌焰。