輸入www.baidu.com之后
- 整體流程大致如下:
瀏覽器獲取輸入的域名www.baidu.com盼产,搜索自身的DNS緩存
搜索瀏覽器操作系統(tǒng)中的DNS緩存(沒有找到或者緩存失效接著向下)
讀取本地的HOST文件(C:\Windows\System32\drivers\etc\hosts)
瀏覽器向DNS(域名系統(tǒng))請求,將域名解析為外網(wǎng)的IP地址磅废,并緩存起來
客戶端的瀏覽器打開連接,與服務(wù)器進(jìn)行連接(Web服務(wù)默認(rèn)端口號為80)挑胸,進(jìn)行TCP的三次握手
TCP握手時果覆,應(yīng)用層會下發(fā)數(shù)據(jù)給傳輸層,這里TCP協(xié)議會指明兩端的端口號等火脉,然后下發(fā)給網(wǎng)絡(luò)層奕塑。網(wǎng)絡(luò)層中的IP協(xié)議會確定IP地址堂污,并且指示了數(shù)據(jù)傳輸中如何跳轉(zhuǎn)路由器。然后包會再被封裝到數(shù)據(jù)鏈路層的數(shù)據(jù)幀結(jié)構(gòu)中龄砰,最后就是物理層面的傳輸盟猖。
- 建立TCP連接后,會進(jìn)行TLS握手换棚,然后就開始正式的傳輸數(shù)據(jù)
- 請求在到達(dá)服務(wù)端之前式镐,可能會有負(fù)載均衡設(shè)備來平均分配所有用戶的請求,分配到多個操作單元上執(zhí)行固蚤,將資源發(fā)送給瀏覽器
首先瀏覽器會判斷狀態(tài)是什么娘汞,如果是200就繼續(xù)解析,如果400或500的話就會報錯夕玩,如果300的話會進(jìn)行重定向你弦,這里會有個重定向計數(shù)器,避免過多次的重定向燎孟,超過次數(shù)也會報錯禽作。
- 瀏覽器解析服務(wù)端發(fā)送的資源,并請求響應(yīng)的圖片揩页、CSS旷偿、JS資源。看是否是長連接來決定是不是斷開TCP連接萍程。
瀏覽器開始解析文件幢妄,如果是gzip格式的話會先解壓,然后通過文件的編碼格式解碼尘喝。
文件解碼成功后會正式開始渲染流程磁浇,先根據(jù)HTML構(gòu)建DOM樹斋陪,有CSS的話會構(gòu)建CSSOM樹朽褪。如果遇到script標(biāo)簽的話,會判斷是否存在async或者defer(前者會并行下載并執(zhí)行JS无虚;后者會先下載文件缔赠,然后等待HTML解析完成后順序執(zhí)行)
如果以上都沒有,就會阻塞渲染流程直到JS執(zhí)行完畢友题。遇到文件下載的會去下載文件嗤堰,這里如果使用
HTTP/2
協(xié)議的話會極大地提高多圖的下載效率。
- 解析渲染度宦,將Web頁面展示給用戶踢匣。
CSSOM樹和DOM樹構(gòu)建完成后會開始生成Render樹,這一步就是確定頁面元素的布局戈抄、樣式等
在生成Render樹的過程中离唬,瀏覽器就開始調(diào)用GPU繪制,合并圖層划鸽,將內(nèi)容顯示在屏幕上输莺。