整體流程:
1. DNS域名解析
2. 建立TCP連接
3. 發送HTTP請求
4. 服務器處理請求
5. 返回響應結果
6. 關閉TCP連接
7. 瀏覽器解析HTML
8. 瀏覽器布局渲染
使用的協議:
DNS、TCP、IP、OSPF(IP數據包在路由器中,路由選擇協議)、ARP、HTTP
詳細:
1. DNS域名解析
在瀏覽器輸入網址,其實就是要向服務器請求我們想要的頁面內容,所以瀏覽器首先要確認的是域名所對應的服務器在哪里。
將域名解析成對應的服務器IP地址這項工作,是由DNS服務器來完成的。
客戶端收到域名地址后,首先去找本地的hosts文件,檢查在該文件中是否有相應的域名、IP對應關系,如果有,則向其IP地址發送請求,如果沒有,再去找DNS服務器。
2. 建立TCP連接
三次握手:請求連接(SYN數據包),確認信息(SYN/ACK數據包),握手結束(ACK數據包)
3. 發起http請求
與服務器建立了連接后,就可以向服務器發起請求了。
4. 服務器處理請求
服務器端收到請求后的由web服務器(准確說應該是http服務器)處理請求。
web服務器解析用戶請求,知道了需要調度哪些資源文件,再通過相應的這些資源文件處理用戶請求和參數,並調用數據庫信息,最后將結果通過web服務器返回給瀏覽器客戶端。
5. 返回響應結果
在http里,有請求就會有響應,哪怕是錯誤信息。
在響應結果中都會有個一個http狀態碼,如200、301、404、500等。通過這個狀態碼可以知道服務器端的處理是否正常,並能了解具體的錯誤。
6. 關閉TCP連接
為了避免服務器與客戶端雙方的資源占用和損耗,當雙方沒有請求或響應傳遞時,任意一方都可以發起關閉請求。四次揮手。
7. 瀏覽器解析HTML
瀏覽器需要加載解析的不僅僅是HTML,還包括CSS、JS。以及還要加載圖片、視頻等其他媒體資源。
瀏覽器通過解析HTML,生成DOM樹,解析CSS,生成CSS規則樹,然后通過DOM樹和CSS規則樹生成渲染樹。
渲染樹與DOM樹不同,渲染樹中並沒有head、display為none等不必顯示的節點。
8. 瀏覽器布局渲染
根據渲染樹布局,計算CSS樣式,即每個節點在頁面中的大小和位置等幾何信息。
HTML默認是流式布局的,CSS和js會打破這種布局,改變DOM的外觀樣式以及大小和位置。
參考:
https://segmentfault.com/a/1190000012092552
https://blog.csdn.net/qq_21993785/article/details/81188253