
用戶打開瀏覽器輸入域名到顯示網(wǎng)頁(yè),都發(fā)生了什么。
DNS解析
域名轉(zhuǎn)換成IP地址的過程,稱之為DNS解析。
1.瀏覽器DNS記錄緩存。
2.hosts文件和操作系統(tǒng)緩存
3.如果上面2個(gè)DNS緩存都沒有記錄,則向域名解析服務(wù)器發(fā)送解析請(qǐng)求。
4.如果域名解析器都沒有,那就復(fù)雜了要遞歸+迭代的去根域服務(wù)器發(fā)出請(qǐng)求然后一步步查,具體我也不知道。
發(fā)起TCP請(qǐng)求
瀏覽器會(huì)選擇一個(gè)大于1024的本級(jí)端口向目標(biāo)IP的80端口發(fā)起TCP連接請(qǐng)求。經(jīng)過TCP3次握手流程,建立了TCP連接。
發(fā)起http請(qǐng)求
HTTP請(qǐng)求是在剛才建立的TCP請(qǐng)求上,按照HTTP協(xié)議標(biāo)準(zhǔn)發(fā)送一個(gè)網(wǎng)頁(yè)索要的請(qǐng)求。
負(fù)載均衡(可能有可能沒有)
根據(jù)分配的算法和規(guī)則,選擇一臺(tái)后端的web服務(wù)器,建立TCP連接,轉(zhuǎn)發(fā)瀏覽器發(fā)出的網(wǎng)頁(yè)請(qǐng)求。服務(wù)器收到請(qǐng)求,產(chǎn)生響應(yīng),發(fā)回給瀏覽器
瀏覽器渲染
瀏覽器根據(jù)頁(yè)面內(nèi)容,生成DOM tree。根據(jù)css內(nèi)容,生成css rule tree。調(diào)用JS引擎執(zhí)行js代碼
根據(jù)dom tree cssrule 生成render tree
根據(jù) render tree 渲染網(wǎng)頁(yè)
瀏覽器解析頁(yè)面內(nèi)容的時(shí)候,發(fā)現(xiàn)頁(yè)面引用了其他未加載的靜態(tài)文件。
靜態(tài)資源加載
什么是CDN?如果我在廣州訪問杭州的淘寶網(wǎng),跨省的通信必然造成延遲。如果淘寶網(wǎng)能在廣東建立一個(gè)服務(wù)器,靜態(tài)資源我可以直接從就近的廣東服務(wù)器獲取,必然能提高整個(gè)網(wǎng)站的打開速度,這就是CDN。CDN叫內(nèi)容分發(fā)網(wǎng)絡(luò),是依靠部署在各地的邊緣服務(wù)器,使用戶就近獲取所需內(nèi)容,降低網(wǎng)絡(luò)擁塞,提高用戶訪問響應(yīng)速度。
接下來的流程就是瀏覽器根據(jù)url加載該url下的圖片內(nèi)容。本質(zhì)上是瀏覽器重新開始第一部分的流程,所以這里不再重復(fù)闡述。區(qū)別只是負(fù)責(zé)均衡服務(wù)器后端的服務(wù)器不再是應(yīng)用服務(wù)器,而是提供靜態(tài)資源的服務(wù)器。