從輸入URL到頁面展示,這中間發生了什么?
1、用戶輸入關鍵詞,地址欄判斷是搜索內容還是url地址。
如果是搜索內容,會使用瀏覽器默認搜索引擎加上搜索內容合成url;
如果是域名會加上協議(如https)合成完整的url。
2、然后按下回車。瀏覽器進程通過IPC(進程間通信)把url傳給網絡進程(網絡進程接收到url才發起真正的網絡請求)。
3、網絡進程接收到url后,先查找有沒有緩存。
有緩存,直接返回緩存的資源。
沒有緩存。(進入真正的網絡請求)。首先獲取域名的IP,系統會首先自動從hosts文件中尋找域名對應的 IP 地址,一旦找到,和服務器建立TCP連接;如果沒有找到,則系統會將網址提交 DNS 域名解析服務器進行 IP 地址的解析。
4、利用IP地址和服務器建立TCP連接(3次握手)。
5、建立連接后,瀏覽器構建數據包(包含請求行,請求頭,請求正文,并把該域名相關Cookie等數據附加到請求頭),然后向服務器發送請求消息。
6、服務器接收到消息后根據請求信息構建響應數據(包括響應行,響應頭,響應正文),然后發送回網絡進程。
7、網絡進程接收到響應數據后進行解析。
如果發現響應行的返回的狀態碼為301,302,說明服務器要我們去找別人要數據,找誰呢?找響應頭中的Location字段要,Location的內容是需要重定向的地址url。獲取到這個url一切重新來過。
如果返回的狀態碼為200,說明服務器返回了數據。
8、好了,獲取到數據以什么方式打開呢?打開的方式不對的話也不行。打開的方式就是 Content-Type。這個屬性告訴瀏覽器服務器返回的數據是什么類型的。如果返回的是網頁類型則為 text/html,如果是下載文件類型則為 application/octet-stream 等等。打開的方式不對,則得到的結果也不對。
如果是下載類型,則該請求會被提交給瀏覽器的下載管理器,同時該請求的流程到此結束。
如果是網頁類型,那么瀏覽器就要準備渲染頁面了。
9、渲染頁面開始。瀏覽器進程發出“提交文檔”(文檔是響應體數據)消息給渲染進程,渲染進程接收到消息后會和網絡進程建立傳輸數據的通道,網絡進程將“文檔”傳輸給渲染進程。
10、一旦開始傳輸,渲染進程便開始渲染界面(詳細渲染過程待續。。。)
11、傳輸完畢,渲染進程會發出“確認提交”消息給瀏覽器進程。
12、瀏覽器在接收到“確認提交”消息后,更新瀏覽器界面狀態(包括地址欄信息,仟前進后退歷史,web頁面和網站安全狀態)。
13、頁面此時可能還沒有渲染完畢,而一旦渲染完畢,渲染進程會發送一個消息給瀏覽器進程,瀏覽器接收到這個消息后會停止標簽圖標的加載動畫。

浙公網安備 33010602011771號