瀏覽器中輸入url后發生了什么

在學習前端的過程中經常看到這樣一個問題:當你在瀏覽器中輸入url后發生了什么?下面是個人學習過程中的總結,供個人復習使用,如有理解不正確或不足的地方希望大家指出。
先上一張腦圖:


瀏覽器中輸入url后發生了什么

我將該過程分為了以下六步:

1. DNS域名解析

  • 在瀏覽器DNS緩存中搜索
  • 在操作系統DNS緩存中搜索
  • 讀取系統hosts文件,查找其中是否有對應的ip
  • 向本地配置的首選DNS服務器發起域名解析請求

2. 建立TCP連接

為了準確地傳輸數據,TCP協議采用了三次握手策略。發送端首先發送一個帶SYN(synchronize)標志的數據包給接收方,接收方收到后,回傳一個帶有SYN/ACK(acknowledegment)標志的數據包以示傳達確認信息。最后發送方再回傳一個帶ACK標志的數據包,代表握手結束。在這過程中若出現問題中斷,TCP會再次發送相同的數據包。
TCP是一個端到端的可靠的面向連接的協議,所以HTTP基于傳輸層TCP協議不用擔心數據的傳輸的各種問題。

3. 發起HTTP請求

請求方法:

  • GET:獲取資源
  • POST:傳輸實體主體
  • HEAD:獲取報文首部
  • PUT:傳輸文件
  • DELETE:刪除文件
  • OPTIONS:詢問支持的方法
  • TRACE:追蹤路徑

請求報文:


請求報文

4. 接受響應結果

狀態碼:

  • 1**:信息性狀態碼
  • 2**:成功狀態碼
    200:OK 請求正常處理
    204:No Content請求處理成功,但沒有資源可返回
    206:Partial Content對資源的某一部分的請求
  • 3**:重定向狀態碼
    301:Moved Permanently 永久重定向
    302:Found 臨時性重定向
    304:Not Modified 緩存中讀取
  • 4**:客戶端錯誤狀態碼
    400:Bad Request 請求報文中存在語法錯誤
    401:Unauthorized需要有通過Http認證的認證信息
    403:Forbidden訪問被拒絕
    404:Not Found無法找到請求資源
  • 5**:服務器錯誤狀態碼
    500:Internal Server Error 服務器端在執行時發生錯誤
    503:Service Unavailable 服務器處于超負載或者正在進行停機維護

響應報文:


響應報文

5. 瀏覽器解析html

瀏覽器按順序解析html文件,構建DOM樹,在解析到外部的css和js文件時,向服務器發起請求下載資源,若是下載css文件,則解析器會在下載的同時繼續解析后面的html來構建DOM樹,則在下載js文件和執行它時,解析器會停止對html的解析。這便出現了js阻塞問題。
預加載器
當瀏覽器被腳本文件阻塞時,預加載器(一個輕量級的解析器)會繼續解析后面的html,尋找需要下載的資源。如果發現有需要下載的資源,預加載器在開始接收這些資源。預加載器只能檢索HTML標簽中的URL,無法檢測到使用腳本添加的URL,這些資源要等腳本代碼執行時才會獲取。
注: 預解析并不改變Dom樹,它將這個工作留給主解析過程

瀏覽器解析css,形成CSSOM樹,當DOM樹構建完成后,瀏覽器引擎通過DOM樹和CSSOM樹構造出渲染樹。渲染樹中包含可視節點的樣式信息(不可見節點將不會被添加到渲染樹中,如:head元素和display值為none的元素)

值得注意的是,這個過程是逐步完成的,為了更好的用戶體驗,渲染引擎將會盡可能早的將內容呈現到屏幕上,并不會等到所有的html都解析完成之后再去構建和布局render樹。它是解析完一部分內容就顯示一部分內容,同時,可能還在通過網絡下載其余內容。

6. 瀏覽器布局渲染

  • 布局:通過計算得到每個渲染對象在可視區域中的具體位置信息(大小和位置),這是一個遞歸的過程。
  • 繪制:將計算好的每個像素點信息繪制在屏幕上

在頁面顯示的過程中會多次進行Reflow和Repaint操作,而Reflow的成本比Repaint的成本高得多的多。因為Repaint只是將某個部分進行重新繪制而不用改變頁面的布局,如:改變了某個元素的背景顏色。而如果將元素的display屬性由block改為none則需要Reflow。

減少rpaint和reflow 方法

參考鏈接:
一次完整的HTTP事務是怎樣一個過程?
瀏覽器內部工作原理
瀏覽器的渲染原理簡介
渲染樹構建、布局及繪制
如何通過預加載器提升網頁加載速度
了解html頁面的渲染過程

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,334評論 2 377

推薦閱讀更多精彩內容