前端原理篇 瀏覽器是如何載入乙個頁面的

2021-10-06 09:52:51 字數 3295 閱讀 3213

瀏覽器做的事情就是把乙個url變成乙個顯示在螢幕上的網頁。了解它的工作原理,有助於我們做效能優化和debug。

**

大概過程:

瀏覽器向服務端發起http(s)網路請求,獲取html檔案

對html檔案進行解析,構建,得到dom樹

計算dom樹上的css屬性

根據css屬性對元素逐個進行渲染,得到記憶體中的位圖

將位圖繪製到介面。

為什麼在網路差的情況下,會看到頁面是逐步載入出來的?

瀏覽器載入頁面是乙個流式處理的過程。

從獲得http響應開始,就產生了流式的資料,後續的 解析構建dom樹、計算css屬性、渲染元素、繪製,都是盡可能地快處理上一步的產出,而不需要等到上一步驟完全結束了,才開始處理上一步的產出,所以我們在瀏覽網頁時,才會看到逐步出現的頁面。

瀏覽器和服務端之間的通訊使用的是http協議。

http 協議是一種建立在** tcp 傳輸層協議上的應用層協議,它規定了通訊雙方使用request-response模式和文字格式**進行通訊。

// 請求報文

// 1.請求行

// 2.請求頭

host: time.geekbang.org

// 3.請求頭空兩行之後是 請求體,可能包含表單或檔案

// 響應報文

// 1.響應行

// 2.響應頭

date: fri, 25 jan 2019 13:28:12 gmt

content-type: text/html

content-length: 182

connection: keep-alive

location: 

strict-transport-security: max-age=15768000

// 3.響應頭空兩行之後是 響應體,可能一段html**。

請求方法

描述get

瀏覽器通過位址列訪問頁面都是 get 方法。

post

表單提交產生 post 方法

connect

http**使用的方法。可通過伺服器**訪問別的**。現在多用於 https 和 websocket。

狀態碼描述

1xx臨時響應,表示希望客戶端繼續傳送請求。(在http庫被處理)。

2xx請求成功。

3xx請求的目標有變化,希望客戶端進一步處理。

301永久重定向。

302臨時重定向。

304客戶端快取(頁面、)沒有更新。

4xx客戶端出錯。

403無訪問許可權。

404請求的資源(頁面、介面)不存在。

5xx服務端出錯。

500服務端錯誤。

503服務端暫時性錯誤,可以一會再試。

request header

描述host

訪問的目標位址。

cookie

存放cookie字串。

connection

指定是否復用tcp連線。http/1.1預設是長連線,http/1.0預設是短連線。

if-modified-since

資源更新時間。如果在該時間之後內容沒有更新,則響應304。

if-none-match

資源摘要資訊e-tag。如果e-tag沒有變,則響應304。反之,響應200和最新的e-tag。

accept

瀏覽器接受的資料型別。例如:text/html。

accept-encoding

瀏覽器接受的編碼格式。例如:gzip。

accept-language

瀏覽器接受的語言。

user-agent

客戶端標識(瀏覽器標識、作業系統標識、瀏覽器核心標識)。

response header

描述set-cookie

瀏覽器會把指定的cookie儲存到本地,下次請求時自動帶上cookie。

expires

本地快取資源的過期時間。決定了瀏覽器下次請求是否直接使用本地快取。

cache-control

用於標識各級快取儲存的時間。例如max-age=0,標識不要快取。

etag

資源的摘要資訊。搭配if-none-match使用。

last-modified

資源的更新時間(精確到秒)。搭配if-modified-since使用。

content-length

內容長度。有利於瀏覽器判斷內容是否已結束。

content-encoding

內容編碼方式。通常是gzip。

via服務端的請求鏈路。常用於除錯。

date

當前的伺服器日期。

server

服務端型別。例如:nginx、tomcat。

請求體一般用於提交表單的場景,一些常見的 body 格式是:

https使用tls加密通道來傳輸http內容。 有兩個作用,一是確定請求的目標服務端身份,二是保證傳輸的資料不會被網路中間節點竊聽或者篡改。

http 2.0 最大的改進有兩點,一是支援服務端推送,二是支援 tcp 連線復用。

服務端推送能夠在客戶端傳送第乙個請求到服務端時,提前把一部分內容推送給客戶端,放入快取當中,這可以避免客戶端請求順序帶來的並行度不高,從而導致的效能問題。

tcp 連線復用,則使用同乙個 tcp 連線來傳輸多個 http 請求,避免了 tcp 連線建立時的三次握手開銷,和初建 tcp 連線時傳輸視窗小的問題。

乙個瀏覽器是如何工作的?

瀏覽器首先使用 http 協議 或者 https 協議,向服務端請求頁面。把請求回來的 html 經過解析,構建成 dom 樹。計算 dom 上的屬性。最後根據 css 屬性對元素逐個進行渲染,得到記憶體中的點陣圖。乙個可選的步驟是對位圖進行合成,這會極大地增加後續繪製的速度。合成之後,再繪製到介面...

推薦乙個瀏覽器 搜狗

上邊顯示自己的登陸的賬戶,有各種工具,在最下邊一行中的各種工具很強大,可以新增各種工具,搜狗瀏覽器本身提供了各種常用的瀏覽器,使用起來十分方便,我用的較多的有訊息盒子 在訊息盒子中可以繫結自己的各種賬號,各種通知都可以進行瀏覽 收藏夾也十分有用,個人比較喜歡 還有上邊的京東 了解購物資訊很方便的 本...

2020前端面試(一) 瀏覽器渲染機制篇

點這裡,歡迎關注 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img oa3fsg6i 1601978311602 在生成dom樹和cssom樹之後,會遍歷dom樹的每乙個可見的節點,對於每個可見的節點,找到cssom樹中對應的規則,然後組合在一起,最終生成一棵渲染樹。注意 渲染樹只...