從一個url地址到最終頁面渲染發生的事情?
1.DNS解析:將域名地址解析成ip地址
--- 瀏覽器DNS緩存
--- 系統DNS緩存
--- 路由器DNS緩存
--- 網絡運營商DNS緩存
--- 若都沒找到則進行遞歸搜索: 例:blog.baidu.com
== .com域名下查找DNS解析
== .baidu域名下查找DNS解析
== blog域名下查找DNS解析
== 出錯了
2. TCP連接 :TCP三次握手
---- 第一次握手: 由瀏覽器發起,告訴服務器我要請求數據了
---- 第二次握手: 由服務器發出,告訴瀏覽器我准備好要接受數據了,你可以發送請求了
---- 第三次握手: 由瀏覽器發出,告訴服務器我馬上就發,你准備接受
3. 發送請求
---- 發送請求:HTTP協議的通信內容
4. 接受響應
---- 響應報文
5. 渲染頁面
---- 遇見HTML標記,瀏覽器調用HTML解析器解析成Token並構建成dom樹
---- 遇見style / link 標記,瀏覽器調用css解析器,處理css標記並構建cssom樹
---- 遇見script標記,調用JavaScript解析器處理script代碼(綁定事件,修改dom樹、cssom樹。。。。)
---- 將dom樹和cssom樹合並成一個渲染樹
---- 根據渲染樹來計算布局,計算每個節點的意義(布局)
---- 將各個節點的顏色繪制到屏幕上(渲染)
注意: 這幾個步驟不一定是按照順序執行,如果dom樹被修改了就會執行多次布局和渲染,往往實際頁面這些步驟都會執行多次
6.斷開連接:TCP四次揮手
第一次揮手:由瀏覽器發起,發送給服務器,我東西發完了(請求報文),你准備關閉吧
第二次揮手:由服務器發起,告訴瀏覽器,我東西接受完了(請求報文),我准備關閉了,你也准備好
第三次揮手:有服務器發起,告訴瀏覽器,我東西發送完了(響應報文),你准備關吧
第四次揮手:由瀏覽器發起,告訴服務器,我東西接受完了,我准備關了,你也准備好吧