從輸入url到頁面載入完成,過程發生了什麼

2021-10-06 13:05:32 字數 2789 閱讀 6126

(1).dns解析

當我們在瀏覽器中輸入乙個網域名稱的時候,例如www.mi.com,這個網域名稱只是與ip位址的乙個對映,這時dns解析就要充當乙個翻譯的角色,把網域名稱解析成真實的ip位址。所以dns解析的過程實際上就是將網域名稱還原成真實ip位址的過程。

dns的解析又分為以下幾個步驟:

1.瀏覽器會先檢查自身快取中有沒有被解析過的這個網域名稱對應的ip,如果有,解析結束;

2.如果瀏覽器快取沒有命中,瀏覽器會檢查作業系統快取中是否有對應的解析過的結果,而作業系統也有乙個網域名稱解析的過程,在hosts檔案裡可以讀寫,如果在這裡找到了對應的對映關係,則會直接使用這個ip位址,完成網域名稱解析;

3.如果還是沒有命中,此時會請求本地網域名稱伺服器(ldns)來解析這個網域名稱,這個伺服器一般離你不會很遠且效能很強,80%的網域名稱解析到這裡就會結束;

4.如果ldns仍然沒有命中,此時會直接到root server網域名稱伺服器請求解析

(2).tcp連線

三次握手

(3).瀏覽器向伺服器傳送http請求

經過tcp的三次握手之後,瀏覽器會對請求進行包裝,包裝成請求報文。完整的http請求包含請求起始行、請求頭部、請求主體三部分。

常用的請求頭如下:

accept: 接收型別,表示瀏覽器支援的mime型別

(對標服務端返回的content-type)

accept-encoding:瀏覽器支援的壓縮型別,如gzip等,超出型別不能接收

content-type:客戶端傳送出去實體內容的型別

cache-control: 指定請求和響應遵循的快取機制,如no-cache

if-modified-since:對應服務端的last-modified,用來匹配看檔案是否變動,只能精確到1s之內,http1.0中

expires:快取控制,在這個時間內不會請求,直接使用快取,http1.0,而且是服務端時間

max-age:代表資源在本地快取多少秒,有效時間內不會請求,而是使用快取,http1.1中

if-none-match:對應服務端的etag,用來匹配檔案內容是否改變(非常精確),http1.1中

cookie: 有cookie並且同域訪問時會自動帶上

connection: 當瀏覽器與伺服器通訊時對於長連線如何進行處理,如keep-alive

host:請求的伺服器url

origin:最初的請求是從**發起的(只會精確到埠),origin比referer更尊重隱私

referer:該頁面的**url(適用於所有型別的請求,會精確到詳細頁面位址,csrf攔截常用到這個字段)

user-agent:使用者客戶端的一些必要資訊,如ua頭部等

(4).瀏覽器接收到伺服器端的響應

伺服器在接收到瀏覽器傳送的http請求之後,會將收到的http報文封裝成http的request物件,並通過不同的web伺服器進行處理,處理完的結果以http的response物件返回,主要包含狀態碼,響應頭,響應報文三個部分。

常見的狀態碼如下:

1**:伺服器收到請求,需要請求者進一步操作

2**:請求成功

3**:重定向,資源被轉移到其它url了

4**:客戶端錯誤,請求語法錯誤或沒有找到相應資源

5**:服務端錯誤,server error

301:資源(網頁等)被永久轉移到其它url,返回值中包含新的url,瀏覽器會自動定向到新的url

302:臨時轉移,客戶端應訪問原有url

304:not modified,指定日期後未修改,不返回資源

403:伺服器拒絕執行請求

404:請求的資源(網頁等)不存在

500:內部伺服器錯誤

響應頭主要由cache-control、 connection、date、pragma等組成;

常用的響應頭如下:

access-control-allow-headers: 伺服器端允許的請求headers

access-control-allow-methods: 伺服器端允許的請求方法

access-control-allow-origin: 伺服器端允許的請求origin頭部(譬如為*)

content-type:服務端返回的實體內容的型別

date:資料從伺服器傳送的時間

cache-control:告訴瀏覽器或其他客戶,什麼環境可以安全的快取文件

last-modified:請求資源的最後修改時間

expires:應該在什麼時候認為文件已經過期,從而不再快取它

max-age:客戶端的本地資源應該快取多少秒,開啟了cache-control後有效

etag:請求變數的實體標籤的當前值

set-cookie:設定和頁面關聯的cookie,伺服器通過這個頭部把cookie傳給客戶端

keep-alive:如果客戶端有keep-alive,服務端也會有響應(如timeout=38)

server:伺服器的一些相關資訊

響應體為伺服器返回給瀏覽器的資訊,主要由html,css,js,檔案組成;

下圖是對某請求的http報文結構的簡要分析:

(5).瀏覽器進行語法解析,渲染頁面

(1).瀏覽器通過解析html,生成dom樹;

(2).解析css,生成css規則樹;

(3).合併dom樹和css規則樹,生成render樹

(4).布局render樹(layout/reflow),負責各元素尺寸、位置的計算

(5).繪製render樹(paint),繪製頁面畫素資訊

(6).瀏覽器會將各層的資訊傳送給gpu,gpu會將各層合成(composite),顯示在螢幕上

(6).關閉tcp連線

四次揮手

從輸入URL到頁面載入完成

例如 協議部分 http www.guokr.com 資源路徑 question 554991 2 如果位址不是乙個ip位址,通過dns 網域名稱系統 將該位址解析成ip位址。ip位址對應著網路上一台計算機,dns伺服器本身也有ip,你的網路設定包含dns伺服器的ip。例如 www.guokr.co...

輸入URL到頁面載入完成過程

首先是網域名稱解析,就是把url轉換成對應的ip位址 網域名稱解析 瀏覽器會先搜尋自己的dns快取,如果沒有在作業系統的dns裡檢視,如果也沒有會搜尋作業系統的hosts檔案,如果沒有會把這個網域名稱傳送到本地網域名稱伺服器上,然後本地網域名稱伺服器會查詢自己的dns快取,如果成功則返回ip位址,如...

從輸入URL到頁面載入顯示完成這個過程發生了什麼?

參考部落格 一般會經歷以下幾個過程 1 在瀏覽器位址列輸入url 2 瀏覽器檢視瀏覽器快取 系統快取 路由器快取,若有,直接在螢幕中顯示,若沒有,則進行第三部操作 3 在傳送http之前,需要網域名稱解析 dns 獲取相應ip位址 4 瀏覽器與伺服器建立tcp連線,與瀏覽器建立tcp三次握手 5 握...