在瀏覽器地址欄中輸入URL后發生了什么


在瀏覽器地址欄中輸入URL后發生了什么

基本流程:

①查詢ip地址

②建立tcp連接,接入服務器

③瀏覽器發起http請求

④服務器后台操作並做出http響應

⑤網頁的解析與渲染

 

詳細步驟如下:

查詢ip地址

①瀏覽器解析出url中的域名。

②查詢瀏覽器的DNS緩存。

③瀏覽器中沒有DNS緩存,則查找本地客戶端hosts文件有無對應的ip地址。

④hosts中無,則查找本地DNS服務器(運營商提供的DNS服務器)有無對應的DNS緩存。

⑤若本地DNS沒有DNS緩存,則向根服務器查詢,進行遞歸查找。

⑥遞歸查找從頂級域名開始(如.com),一步步縮小范圍,最終客戶端取得ip地址。

 

tcp連接與http連接

①http協議建立在tcp協議之上,http請求前,需先進行tcp連接,形成客戶端到服務器的穩定的通道。俗稱TCP的三次握手。

②tcp連接完成后,http請求開始,請求有多種方式,常見的有get,post等。

③http請求包含請求頭,也可能包含請求體兩部分,請求頭中包含我們希望對請求文件的操作的信息,請求體中包含傳遞給后台的參數。

④服務器收到http請求后,后台開始工作,如負載平衡,跨域等,這里就是后端的工作了。

⑤文件處理完畢,生成響應數據包,響應也包含兩部分,響應頭和相應體,響應體就是我們所請求的文件。

⑥經過網絡傳輸,文件被下載到本地客戶端,客戶端開始加載。

 

html渲染

①客戶端瀏覽器加載了html文件后,由上到下解析html為DOM樹(DOM Tree)。

②遇到css文件,css中的url發起http請求。

③這是第二次http請求,由於http1.1協議增加了Connection: keep-alive聲明,故tcp連接不會關閉,可以復用。

④http連接是無狀態連接,客戶端與服務器端需要重新發起請求--響應。

在請求css的過程中,解析器繼續解析html,然后到了script標簽。

⑤由於script可能會改變DOM結構,故解析器停止生成DOM樹,解析器被js阻塞,等待js文件發起http請求,然后加載。這是第三次http請求。js執行完成后解析器繼續解析。

⑥由於css文件可能會影響js文件的執行結果,因此需等css文件加載完成后再執行。

⑦瀏覽器收到css文件后,開始解析css文件為CSSOM樹(CSS Rule Tree)。

⑧CSSOM樹生成后,DOM Tree與CSS Rule Tree結合生成渲染樹(Render Tree)。

⑨Render Tree會被css文件阻塞,渲染樹生成后,先布局,繪制渲染樹中節點的屬性(位置,寬度,大小等),然后渲染,頁面就會呈現信息。

⑩繼續邊解析邊渲染,遇到了另一個js文件,js文件執行后改變了DOM樹,渲染樹從被改變的dom開始再次渲染。

⑪繼續向下渲染,碰到一個img標簽,瀏覽器發起http請求,不會等待img加載完成,繼續向下渲染,之后再重新渲染此部分。

⑫DOM樹遇到html結束標簽,停止解析,進而渲染結束。

 

從此可以得出網站的一些優化的方法:

①減少DNS查詢:將服務器域名的ip信息加入本地host文件。

②減少http請求數量,對於圖片使用雪碧圖,對於html文件和css文件,js文件分別進行合並操作。

③減少下載時間:壓縮圖片,使用壓縮應用壓縮文檔中的空格,刪除文件多余的語句和注釋,創造自己的js精簡庫和精簡框架,使用本地瀏覽器緩存。

④提前渲染開始時間:將css鏈接放在html頭部。

⑤減輕解析器的阻塞:將js鏈接放在body尾部。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM