一文講透從輸入URL到瀏覽器顯示頁面發生了什麼

2021-09-12 03:41:09 字數 3074 閱讀 1970

這是乙個老生常談的話題,今天我們再來詳細想分析一波。

1.瀏覽器對使用者輸入的**(網域名稱)做初步的格式化檢查

2.瀏覽器對使用者輸入的**預設進行http/https補全。

ps:dns(domain name system),網域名稱系統,是乙個聯機分布式資料庫系統,並採用客戶伺服器方式,dns大多數名字都在本地解析,少量解析需要在網路上,因此它的效率很高。ip位址的解析是由許多的網域名稱伺服器程式共同完成的。

在這個步驟中,又細分以下幾個步驟:

1).查詢瀏覽器的dns快取,可以使用 chrome://net-internals/#dns 來檢視,如果沒有對應ip,則進入下一步

2).查詢作業系統的dns快取,以windows系統為例,可以在命令列下使用 ipconfig /displaydns 來進行檢視,如果沒有對應ip,則進入下一步

此時已經確保了你的本機的dns裡沒有對應ip了,接下來就要通過網路去查詢了。

4).聯網向瀏覽器發起乙個dns的系統呼叫,向本地配置的isp(internet service provide,即網際網路服務提供者,可以理解為運營商)發起網域名稱解析請求,通過udp協議向dns伺服器的53埠發起請求,這個請求是遞迴的請求,也就是的dns伺服器必須得提供給我們該網域名稱的ip位址,isp的dns伺服器首先查詢自身的快取,找到對應的條目,且沒有過期,則解析成功。如果沒有找到對應的條目,則isp的dns代我們的瀏覽器發起迭代dns解析請求,它首先是會找根域的dns的ip位址,這個dns伺服器都內建13臺根域的dns的ip位址(這裡的13臺根網域名稱伺服器其實並不真是13臺,而是13個ip位址,採用任播技術,我們可以在全球設立這些ip的映象站點,你訪問到的ip並不是唯一的那台主機),找到根域的dns位址後,就會向其發起請求,例如www.cnblogs.com這個網域名稱(www是**網域名稱,cnblog是二級,com是頂級),根域發現這是乙個頂級域com域的乙個網域名稱,於是就告訴isp的dns我不知道這個網域名稱的ip位址,但是我知道com域的ip位址,你去找它,於是isp的dns就得到了com域的ip位址,又向com域的ip位址發起了請求,請問www.cnblogs.com這個網域名稱的ip位址是多少?com域這台伺服器告訴運營商的dns我不知道www.cnblogs.com這個網域名稱的ip位址,但是我知道www.cnblogs.com這個域的dns位址,你去找它去,於是isp的dns又向www.cnblogs.com這個網域名稱的dns位址(這個一般就是由網域名稱註冊商提供的,像萬網,新網等)發起請求(請問www.cnblogs.com這個網域名稱的ip位址是多少?),這個時候cnblogs.com域的dns伺服器一查,果真在我這裡,於是就把找到的結果傳送給isp的dns伺服器,這個時候運營商的dns伺服器就拿到了www.cnblogs.com這個網域名稱對應的ip位址,並返回給windows系統核心,核心又把結果返回給瀏覽器,終於瀏覽器拿到了www.cnblogs.com對應的ip位址,該進行一步的動作了。

4.發起tcp的3次握手

大概的過程就是:

在三次握手之後,a和b都能確定這麼一件事: 我說的話,你能聽到; 你說的話,我也能聽到。這樣,就可以開始正常通訊了。

5.傳送http請求

http請求報文攜帶各種頭部資訊,大致分為三個部分:請求行、請求頭、請求體。

請求行一般包括:伺服器協議版本,狀態碼:

狀態碼是由3位數組成,第乙個數字定義了響應的類別,且有五種可能取值:

1xx:指示資訊–表示請求已接收,繼續處理。

2xx:成功–表示請求已被成功接收、理解、接受。

3xx:重定向–要完成請求必須進行更進一步的操作。

4xx:客戶端錯誤–請求有語法錯誤或請求無法實現。

5xx:伺服器端錯誤–伺服器未能實現合法的請求。

請求頭一般包括:此次響應的時間、此次響應返回的檔案長度、檔案型別等等

請求體一般包括:伺服器返回給客戶端的檔案、資料等(當請求時post的時候才會有請求體)

6.伺服器處理後響應給客戶端html檔案

7.瀏覽器解析html**。

如果瀏覽器在請求靜態資源時(在未過期的情況下),向伺服器端發起乙個http請求(詢問自從上一次修改時間到現在有沒有對資源進行修改),如果伺服器端返回304狀態碼(告訴瀏覽器伺服器端沒有修改),那麼瀏覽器會直接讀取本地的該資源的快取檔案。

8.瀏覽器渲染頁面

渲染的過程大致分為:

轉換:瀏覽器從磁碟或網路讀取 html 的原始位元組,並根據檔案的指定編碼(如 utf-8)將它們轉換成各個字元。

tokenizing: 瀏覽器將字串轉換成 w3c html5 標準規定的各種tokens,例如,「」、「」,以及其他尖括號內的字串。每個token都具有特殊含義和一組規則。

詞法分析:發出的標記轉換成定義其屬性和規則的「物件」。

dom構建:最後,由於 html 標記定義不同標記之間的關係(一些標記包含在其他標記內),建立的物件鏈結在乙個樹資料結構內,此結構也會捕獲原始標記中定義的父項-子項關係:html 物件是 body 物件的父項,body是paragraph物件的父項,依此類推。

整個流程最終輸出是頁面的文件物件模型 (dom),瀏覽器對頁面進行的所有進一步處理都會用到它。

總結

dns解析

tcp連線

傳送http請求

伺服器處理請求並返回http報文

瀏覽器解析渲染頁面

連線結束

用到的協議:

這部分的知識完全可以寫成一本書的厚度,無論從前端,後端,網路,協議各方面都有龐大的知識體系,所以只能對其中最核心的地方做闡釋,具體請參見《網路是怎麼連線的》這本書。

本文部分參考了

《計算機網路》教材

從輸入url到瀏覽器載入過程

從輸入url到頁面載入發生了什麼 最近在進行前端面試方面的一些準備,看了網上許多相關的文章,發現有乙個問題始終繞不開 在瀏覽器中輸入url到整個頁面顯示在使用者面前時這個過程中到底發生了什麼。仔細思考這個問題,發現確實很深,這個過程涉及到的東西很多。這個問題的回答真的能夠很好的考驗乙個web工程師的...

從輸入 URL 到瀏覽器渲染完成

首先,判斷是不是https的,如果是,則https其實是http ssl tls 兩部分組成,也就是在http上又加了一層處理加密資訊的模組。服務端和客戶端的資訊傳輸都會通過tls進行加密,所以傳輸的資料都是加密後的資料。進行三次握手,建立tcp連線。第一次握手 建立連線。客戶端傳送連線請求報文段,...

從瀏覽器位址列輸入URL到瀏覽器呈現資料全過程解析

一 輸入裝置 或貼上 輸入 url,按下 enter鍵 或其他按鈕開始請求。二 瀏覽器開始解析 url 關於 url 到相關知識點 什麼是uri,url以及urn,你真的理解了嗎。1 url 是否合法 2 url 中的字元轉換 三 檢查本地快取,根據快取情況決定下一步的動作 1 強快取 cache ...