使用者從輸入 url 到瀏覽器響應,呈現給使用者的具體過程
1、使用者在輸入欄輸入位址
(1) 如果有 beforeunload 事件會先執行判斷繼續還是跳出操作
(2) 瀏覽器程序識別是 位址還是關鍵字檢索
(3) 將正確的 url 位址傳送給網路程序
2、網路程序檢視有沒有快取
(1) 有快取直接返回資料
(2) 沒有快取直接進入網路程序請求流程
3、瀏覽器程序查詢 dns 獲取伺服器 ip 位址
(1) 如果請求協議是 https 那麼還需要建立tls連線
(2) 利用ip位址和伺服器建立 tcp 連線
(3) 如果瀏覽器的 tcp 連線請求有 6個,則需要排隊等待
4、tcp 連線協議通過與伺服器進行3次握手確立連線
(1) 瀏覽器即使用者端發起第一次握手
(2) 伺服器接收到使用者端的訊息發起接收到資訊
(3) 使用者端接收到資訊後向伺服器發起第三次握手表示已經接收到資訊可以連線
(4) 如果第二次握手傳送資料報丟失或者使用者端發起第三次握手資料報丟失,伺服器在長時間未接收到資訊會再次發起,總共會嘗試6次
5、tcp 接受資訊
6、網路程序接收到資料後將返回頭和返回體傳送給瀏覽器
7、瀏覽器程序讀取返回頭檢視返回資訊,是否重定向或者響應資料型別處理
(1) 重定向即回到第3步
(2) 會根據 content-type 的值來決定如何顯示響應體的內容。
(4) 如果是 html,那麼瀏覽器則會繼續進行導航流程
8、準備渲染程序
(1) 預設開啟乙個新的渲染程序
(2) 如果從乙個頁面開啟了另乙個新頁面,而新頁面和當前頁面屬於同一站點的話,那麼新頁面會復用父頁面的渲染程序
9、瀏覽器程序接收到網路程序的響應頭資料之後,便向渲染程序發起「提交文件」的訊息
10、渲染程序就和網路程序直接建立連線進行管道資料傳輸
11、資料傳輸完成後tcp發起4次揮手斷開連線並且渲染程序同時向瀏覽器程序發起確認提交
12、瀏覽器程序收到確認提交後會更新瀏覽器介面狀態,包括了安全狀態、位址列的 url、前進後退的歷史狀態。
13、渲染程序開始頁面解析和子資源載入
那麼導航被提交之後又會怎麼樣呢
14、首先渲染程序先將html(超文字標記語言)轉換成為瀏覽器可以識別的 dom 樹節點
(1) 將所有的 css 樣式轉換成為 瀏覽器可以理解的 stylesheets 結構
(2) 轉化所有的 css樣式表的屬性值,使其標準化,例如 color #···· -> rgba模式
(3) 計算合成為 computedstyle 樣式
16、接下來就是布局階段,通過dom和computedstyle 建立布局樹並計算布局資訊
(1) 遍歷所有可見的 dom 節點
(2) 忽略掉不可見節點 例如:display:none,head標籤下的所有內容
17、對布局樹進行分層,並生成分層樹。
(1) 擁有層疊上下文屬性的元素會被提公升為單獨的一層
(2) 需要剪裁(clip)的地方也會被建立為圖層
18、為每個圖層生成繪製列表,並將其提交到合成執行緒。
19、合成執行緒將圖層分成圖塊,並在光柵化執行緒池中將圖塊轉換成位圖。
20、合成執行緒傳送繪製圖塊命令 drawquad 給瀏覽器程序。
21、瀏覽器程序根據 drawquad 訊息生成頁面,並顯示到顯示器上。
這樣乙個完整的瀏覽器導航流程就結束了
瀏覽器輸入URL到返回頁面的整個過程
自己總結分析。1.根據網域名稱,進行dns網域名稱解析,獲得ip位址。2.根據ip位址,建立tcp連線 3.建立tcp連線後,向ip位址傳送http請求 4服務端處理請求 5服務端返回響應結果 6 關閉tcp連線 7瀏覽器解析html 8瀏覽器渲染資料展示 q1 現代瀏覽器在與伺服器建立了乙個 tc...
瀏覽器輸入URL到返回頁面的全過程
問題描述 第一步,解析網域名稱,找到主機 正常情況下,瀏覽器會快取dns一段時間,一般2分鐘到30分鐘不等。如果有快取,直接返回ip。快取中如果沒有查到ip,瀏覽器會做系統呼叫,讀取主機的hosts檔案,如果找到,直接返回ip。hosts檔案裡面還是沒有找到,則直接去路由器中尋找dns快取,一般這個...
輸入URL至瀏覽器顯示頁面
輸入 根據url找ip 先檢視本地hosts檔案 再檢視本地dns和快取 遞迴,若沒有本地dns向根dns查詢 根dns 遞迴,沒有去去本地dns去域伺服器查詢 返回ip,把對應關係加入快取 建立tcp鏈結,3次握手 瀏覽器向web伺服器傳送http請求 起始行,請求頭,請求主體 起始行包括url,...