一個頁面從輸入 URL 到頁面加載完的過程當中都發生了什麼事情?
總的來講,根據web瀏覽器地址欄中指定的URL,web瀏覽器從web服務器端獲取資源文件等信息,從而顯示出web頁面。具體而言,有以下幾個步驟:css
- 1.瀏覽器接收URL(包含的信息:協議方案名、服務器地址:服務器端口號、帶層次的文件路徑、查詢字符串?、片斷標識符)

- 2.將URL與緩存進行比對若是請求的頁面在緩存中且未過時,則直接進行第8步。

- 3.負責域名解析DNS服務。系統進行DNS查找,並將IP地址返回給瀏覽器。
DNS服務適合HTTP協議同樣位於應用層的協議。它提供域名到IP地址之間的解析服務。能夠經過域名查找IP地址,也能夠逆向從IP地址反查找域名。
- 4.瀏覽器與服務器創建TCP鏈接(在傳輸層)
這一步很複雜由於用到了HTTPS。三次握手(SYN,SYN/ACK,ACK),如有一次任何一方收不到信息那麼將會從新發起 TCP 鏈接。
- 5.瀏覽器向服務器經過TCP協議鏈接發送HTTP請求。
數據通過應用層、傳輸層、網絡層、鏈路層,傳輸到下一個目的地。應用層決定了向用戶提供應用服務時的通訊(http協議,DNS服務)。傳輸層對上層應用層,提供處於網絡鏈接中的兩臺計算機之間的數據傳輸(TCP協議和UDP協議)。網絡層用來處理網絡上流動的數據包,數據包是網絡傳輸的最小數據單位,該層規定經過怎樣的路徑到達對方計算機,並把數據傳輸給對方。鏈路層處理鏈接網絡的硬件部分(網卡,光纖)。這一步驟還會涉及發送給服務器的請求報文(請求方法、請求URI、協議版本、首部字段、內容實體)。
- 6.服務器收到請求,從它的文檔空間中查找資源並返回HTTP響應。
服務器返回的響應報文包括協議版本、狀態碼、解釋狀態碼的緣由短語、響應首部字段、實體主體。
- 7.瀏覽器接受 HTTP 響應,檢查 HTTP header 裏的狀態碼,並作出不一樣的處理方式。關於返回的狀態碼的具體說明看上個問題。
- 8.若是是能夠緩存的,這個響應則會被存儲起來。
根據首部字段判斷是否進行緩存。例如,Cache-Control, no-cache(每次使用緩存前和服務器確認),no-store 絕對禁止緩存。
- 9.瀏覽器解碼響應
瀏覽器拿到index.html文件後,就開始解析其中的html代碼,遇js/css/image等靜態資源時,就向服務器端去請求下載;解析成對應的樹形數據結構DOM樹、CSS規則樹,Javascript腳本經過DOM API和CSSOM API來操做DOM樹、CSS規則樹。
- 10.渲染頁面
- 11.關閉TCP鏈接或繼續保持鏈接
經過四次揮手關閉鏈接(FIN ACK, ACK, FIN ACK, ACK)。