在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

瀏覽器的底層是怎么樣完成一次網絡請求的

Wildesbeast ? 來源:今日頭條 ? 作者:IT知識課堂 ? 2020-02-20 15:49 ? 次閱讀

對于面試的大部分前端開發者來說,對瀏覽器的了解也算是一知半解,因為我們一開始前端覺得,我們開發中通常使用瀏覽器來顯示和調試頁面用的,不會涉入到太過的相關瀏覽器工作原理知識。

這你就大錯特錯了,雖然瀏覽器默默的為我們工作,但是有關瀏覽器的工作原理不但在你就業前端面試中屬于重中之重,也是在前端優化中占有很大比重。作為一個前端開發如果不了解瀏覽器的工作原理,只能永遠停留在前端“切圖仔”水平。

PS:前幾天還有個讀者和小鹿說,之前看到小鹿朋友圈發過這個這個導圖,當時沒當回事,第二天面試竟然問到了。

學習瀏覽器工作原理是為了能夠運用到實際項目中,比如前端的性能優化以及錯誤排查,都會涉及到瀏覽器相關的知識,所以掌握瀏覽器的工作原理是必不可缺的,相信你學完之后,能夠對你的個人能力和見識會有很大的提升。

瀏覽器涉及到的知識點非常多而且非常重要,文章中可能其中有不足和錯誤的地方,也歡迎各位指出!

思維導圖

1、瀏覽器的職責

我們由淺入深的去了解瀏覽器的工作原理。首先學習一個事物要知道它是什么,它要完成一個什么樣的事情,也就是擁有什么樣的職責。

對于瀏覽器來說,表面上看來,我們輸入了 URL,然后等待幾秒瀏覽器就展現出我們想要訪問的網址內容了。對沒錯,這就是瀏覽器的職責所在。這只是停留在了表面,要想深入知道瀏覽器在這個階段發生了什么?需要我們進一步探索瀏覽器的工作原理。

所以說,無論是面試還是實際工作中,瀏覽器無時不刻和我們打交道。那我們就要從在瀏覽器輸入 URL 開始說起,直到瀏覽器最后展現出網站內容,這個過程瀏覽器做了哪些工作,又是如何工作的呢?

我們會詳細分為以下幾大模塊進行系統的講解:

1、DNS 解析

2、TCP 連接

3、HTTP 請求

4、構建 DOM 樹

5、構建 CSSOM 樹

6、生成渲染樹

7、合成、繪制

其中有些部分我們之前的文章已經分享過,所以也不過到陳述,到時候會鞏固一下,重點我們放在瀏覽器的渲染原理上,這也是我們以后在學習前端優化中的重點。

2、DNS 解析

在之前的文章 TCP 三次握手中提到,要想得到接收方的 MAC 地址,需要通過對方的 IP 地址獲取,對方的 IP 需要通過 DNS 解析。

2.1 為什么進行 DNS 解析?

所謂的 DNS 解析就是將我們輸入在網頁地址欄的 URL 通過 DNS 解析成 IP 地址。DNS 就是將域名轉化成 ip 地址的過程。那么這個過程會發生什么呢?和小鹿一起深入探究一下。

2.2 系統緩存查詢

首先瀏覽器會調用一個庫函數,檢測本地的 hosts 文件(可以認為是電腦本地的一個地址映射文件),從該文件中查看是否有對應的該域名的 IP 地址,這個過程是在系統緩存中查找是否存在該域名對應的 IP 地址。

比如在瀏覽器的地址欄中輸入小鹿的博客網址(www.xiaolu.com),然后回車,此時瀏覽器拿著這個域名去本地電腦的一個名為 hosts 文件中查詢是否存在該域名所對應的 IP 地址,如果有,就返回給瀏覽器,如果沒有,我們繼續往下進行。

2.3 路由器緩存、ISP 緩存

如果系統緩存沒有,就會向 DNS 服務器發送請求,而網絡服務一般都會先經過路由器以及網絡服務商(電信),所以會先查詢路由器緩存,然后再查詢 ISP 的 DNS 緩存。

PS:ISP緩存,本身是一種寬帶接入提供商給網頁批量訪問加速的技術。ISP會將當前訪問量較大的網頁內容放到ISP服務器的緩存中,當有新的用戶請求相同內容時,可以直接從緩存中發送相關信息,不必每次都去訪問真正的網站,從而加快了不同用戶對相同內容的訪問速度,同時也能節省網間流量結算成本。

2.4 DNS 遞歸查詢

如果路由器緩存和 ISP 的 DNS 緩存還是沒有的話,我們就進行 DNS 遞歸查詢。從根域名服務器開始查詢,然后再到頂級域名服務器,最后到主域名服務器依次查詢。

但是這里有兩種查詢方式,不僅僅有遞歸查詢一種方式,還有一個查詢方式是迭代查詢,兩種查詢方式的區別是什么呢?

迭代查詢:DNS 收到請求時,而不是直接返回查詢結果,而是告訴客戶端另一臺 DNS 服務器地址。然后客戶端再向這臺的 DNS 服務器提交請求,依次循環。

遞歸查詢:當 DNS 服務器收到請求時,就會檢查 DNS 緩存,如果沒有就會詢問其他服務器,并將返回的查詢結果返回客戶端。

我們前端會在性能優化的使用用到 DNS 的相關知識,我們在這稍微提一下,如何進行 DNS 優化呢?

DNS 查詢經歷很多步驟,查詢很慢。瀏覽器獲取到 IP 地址后,一般都會加到瀏覽器的緩存中,本地的 DNS 緩存服務器,也可以去記錄。

另外使用 DNS 負載均衡,通常我們的網站應用各種云服務,DNS 系統根據每臺機器的負載量,地理位置的限制等等,去提供高效快速的 DNS 解析服務。

3、TCP 連接

我們通過 DNS 查詢到 IP 地址之后,我們就開始打算與服務器建立連接,為接下來的數據傳輸做準備,這部分在之前的文章中寫的非常詳細,一定要去看哦。

網絡分層模型

動畫:用動畫給面試官解釋 TCP 三次握手過程

4、HTTP 請求

我們客戶端與服務端通過 TCP 的三次握手建立連接之后,客戶端開始向服務器主動發起請求。

PS:對于 HTTP 協議,我們會在后邊單獨拿出一篇文章來詳細介紹它的發展史,這里我們只涉及到 HTTP 的請求相關的內容。

服務端接收到客戶端發送的信息,就返回響應信息和文件。客戶端如何判斷服務端是否成功返回了呢?就需要下列的一些狀態碼來識別,同樣前端做的工作也是通過狀態碼來判斷當前響應狀態。

1XX(信息性狀態碼) : 服務器正在處理請求中。

2XX (成功狀態碼): 請求處理完畢。

3XX (重定向狀態碼): 需要附加操作以完成請求。301:永久性重定向。該狀態碼表示請求的資源已被分配了新的 URI,以后使用該資源,使用現在所指 URI。302:臨時性重定向。表示該狀態碼被分配了新的 URI,希望用戶本次能夠使用新的 URI 訪問。304:服務器資源未改變,可直接使用客戶端未過期的緩存。

4XX (客戶端錯誤狀態碼): 服務器無法處理請求。400:該請求報文中有語法錯誤。403:沒有資源的訪問權限。404:找不到資源。

5XX (服務端錯誤狀態碼): 服務器處理請求出錯。500:服務器發生錯誤503:服務器超荷載或正在維護。

遠程服務器找到資源并使用 HTTP 響應返回該資源,值為 200 的 HTTP 響應狀態表示一個正確的響應。

5、瀏覽器的渲染原理

5.1 構建 DOM

服務器將 HTML、CSS、JS文件轉化為 0,1字節數據在網絡中傳輸給瀏覽器,瀏覽器通過判斷狀態碼開始接收、解析文件,這開始運用到瀏覽器的渲染原理。

首先瀏覽器要做的就是獲取 HTTP 的 Request 的 body 中字符串(字符流)的 HTML 文本,進行解析并構建 DOM 樹。

將字符流轉化為字符串之后,瀏覽器開始進行詞法分析,雖然這個名詞我們不熟悉,但是我們要知道,一個 HTML 字符串我們要拆分開才能構建 DOM 樹,詞法分析就是將字符串拆分成的過程。將字符串轉化為的 token(標記) —— token 作為代碼的最小單位,也就是拆分后的結果,這個過程我們稱為標記化。

我們將字符串拆解之后,然后將這些標記轉化為 Node 結點,瀏覽器根據不同的結點開始構建一棵 DOM 樹。這就是整個 DOM 樹構建的過程,其中還涉及到很多的細節,比如詞法分析是如何一個過程(狀態機),有興趣的小伙伴可以詳細查看英文文檔,在文章底部。

5.2 構建 CSSOM 樹

瀏覽器已經把 HTML 文件轉化為了 DOM 樹,下面就對 CSS 樣式文件進行解析,構建成 CSSOM 樹。這個過程和上述構建 DOM 樹的過程有點相似,但是其中 CSSOM 樹的構建更加的耗時。下面我們來看看如何耗時的?

瀏覽器通過遞歸的方式 DOM 樹為結點設置樣式。通過先找到具體的標簽,然后遞歸找到設置的上級標簽,最后確定選擇器選擇的所選標簽的樣式。

比如下邊的例子,瀏覽器是如何確定結點的樣式的呢?

1

2 3

小鹿動畫學編程,一天一篇動畫喂飽你!

4
5

你好,小鹿!

6
7 8 9 div span p{ 10 color: red; 11 font-size: 12px; 12 } 13 div { 14 background:red; 15 }

首先在 HTML 中找到 p 標簽,一共有兩個地方,然后按照樣式的繼續遞歸中找具有父節點的 p,我們只好把第二個 p 過濾掉,然后繼續向上找父節點 div,匹配成功,然后將樣式設置到結點上。

我們通過上邊的動畫,可以知道為什么構建 CSSOM 樹的時候非常耗時了,我們在寫代碼的時候可以做出優化,所以應該避免書寫過于具體的 CSS 選擇器,少一些添加無意義的 HTML 標簽,有利于提高習頁面的性能。

5.3 構建渲染樹

我們分別將上邊生成的 DOM 和 CSSOM 樹進行合并,生成我們的渲染樹。但是在合并的時候,并不是兩者簡單的進行結合,因為有些結點我們并不需要顯示,還記得有一個 display:none 屬性嗎?如果某結點的樣式有這個屬性,就不會出現在渲染樹中。

5.4合成、繪制

瀏覽器在生成渲染樹的時候,就會根據渲染樹進行布局,調用 GPU 進行繪制,然后合成圖層,最后顯示在屏幕上。

小結

通過上邊的對瀏覽器工作原理的介紹,相信你對瀏覽器有了新的認識和簡介,但是只看上邊的知識還完全不能深入到底層,如果還想要進行深入的對瀏覽器的工作原理進行研究,可以英文文檔《How Browsers Work》,已經有人把它翻譯成了中文,但是我自己又翻譯了一遍。

第一,提高自己閱讀英文文檔的能力;

第二,從中學會提取關鍵的內容。

雖然翻譯過程中遇到很多問題,但是相信你翻譯完之后,對你又有新的收獲和認識,更重要的是你的能力又比別人提升了 —— 更何況我這個英語四級沒過的人都堅持翻譯下來了呢!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 路由器
    +關注

    關注

    22

    文章

    3732

    瀏覽量

    113820
  • DNS
    DNS
    +關注

    關注

    0

    文章

    218

    瀏覽量

    19853
  • 瀏覽器
    +關注

    關注

    1

    文章

    1027

    瀏覽量

    35368
收藏 人收藏

    評論

    相關推薦

    如何調試 HTTP 請求和響應

    調試HTTP請求和響應是Web開發和網絡編程中的個重要技能。以下是些步驟和工具,可以幫助你調試HTTP請求和響應: 1. 使用
    的頭像 發表于 12-30 09:28 ?120次閱讀

    訊飛星火瀏覽器插件全新升級

    時刻陪伴,星火插件讓你的瀏覽器變成真正的生產力工具。
    的頭像 發表于 12-25 09:48 ?186次閱讀

    美司法部要求谷歌剝離Chrome瀏覽器及安卓系統

    近期,美國司法部在份提交給法院的文件中,正式提出了對谷歌的嚴厲要求。他們請求法官裁定,要求谷歌剝離其廣受歡迎的Chrome瀏覽器業務。此舉意味著,谷歌可能在未來五年內被禁止重新進入瀏覽器
    的頭像 發表于 11-22 13:46 ?259次閱讀

    AWTK 最新動態:支持瀏覽器控件

    導讀AWTK瀏覽器控件,基于webview項目實現,將瀏覽器嵌入到AWTK應用程序中,讓開發者可以方便的集成在線幫助和調用地圖等功能。awtk-widget-web-view是基于webview實現的AWTK瀏覽器控件,使得AW
    的頭像 發表于 11-20 01:05 ?204次閱讀
    AWTK 最新動態:支持<b class='flag-5'>瀏覽器</b>控件

    個Chrome瀏覽器插件

    、什么是瀏覽器插件 瀏覽器插件是依附于瀏覽器,用來拓展網頁能力的程序。插件具有監聽瀏覽器事件、獲取和修改網頁元素、攔截
    的頭像 發表于 11-18 17:12 ?356次閱讀
    寫<b class='flag-5'>一</b>個Chrome<b class='flag-5'>瀏覽器</b>插件

    跨域問題是由瀏覽器的同源策略造成的

    瀏覽器
    jf_62215197
    發布于 :2024年08月27日 07:51:42

    不只是前端,后端、產品和測試也需要了解的瀏覽器知識(二)

    繼上篇《 不只是前端,后端、產品和測試也需要了解的瀏覽器知識()》介紹了瀏覽器的基本情況、發展歷史以及市場占有率。 本篇文章將介紹瀏覽器基本原理。 在掌握基本原理后,通過技術深入,在
    的頭像 發表于 08-12 14:32 ?353次閱讀
    不只是前端,后端、產品和測試也需要了解的<b class='flag-5'>瀏覽器</b>知識(二)

    不只是前端,后端、產品和測試也需要了解的瀏覽器知識

    、我們為什么要了解瀏覽器? 1. 對于前端開發者 1.瀏覽器是用戶體驗的第線。我們需要了解瀏覽器的工作原理,才能有效地設計和實現用戶界面
    的頭像 發表于 07-01 18:03 ?476次閱讀
    不只是前端,后端、產品和測試也需要了解的<b class='flag-5'>瀏覽器</b>知識

    Opera瀏覽器引領潮流,全球首接端側AI大模型

    昆侖萬維旗下海外平臺Opera宣布,其旗艦瀏覽器Opera One和游戲瀏覽器Opera GX將正式接入端側AI大模型,成為全球首個實現這突破的主流瀏覽器
    的頭像 發表于 06-03 09:18 ?741次閱讀

    谷歌迅速修復Chrome瀏覽器安全漏洞,已向用戶推送更新

    谷歌已向Mac/Windows及Linux平臺分別推出125.0.6422.60/.61與125.0.6422.60版Chrome瀏覽器,預計數周內完成全網部署。
    的頭像 發表于 05-16 11:43 ?445次閱讀

    蘋果新規實施后,瀏覽器公司不滿意

     首先,準入門檻頗高。盡管蘋果官方允許非Safari 瀏覽器呈現,但需滿足在過去年中,在所有 27 個歐盟成員國的下載次數超過 5000 。此外,蘋果每年僅更新一次
    的頭像 發表于 04-13 10:25 ?1179次閱讀

    Edge瀏覽器關閉Microsoft Rewards擴展原因揭曉

    據報道,近期德國等地的Microsoft Edge瀏覽器用戶發現,安裝或啟動Microsoft Rewards擴展后,會出現“右上角擴展被Edge瀏覽器禁用以保障您的瀏覽器安全”的提醒窗口。
    的頭像 發表于 04-10 09:55 ?828次閱讀

    鴻蒙開發實戰:網絡請求庫【axios】

    [Axios]?,是個基于 promise 的網絡請求庫,可以運行 node.js 和瀏覽器中。本庫基于[Axios]原庫v1.3.4版本進行適配,使其可以運行在 OpenHarmo
    的頭像 發表于 03-25 16:47 ?3899次閱讀
    鴻蒙開發實戰:<b class='flag-5'>網絡</b><b class='flag-5'>請求</b>庫【axios】

    鴻蒙實戰開發:【瀏覽器制作】

    使用[@ohos.systemparameter]接口和[Web組件]展示了瀏覽器的基本功能,展示網頁,根據頁面歷史棧前進回退等。
    的頭像 發表于 03-19 17:47 ?597次閱讀
    鴻蒙實戰開發:【<b class='flag-5'>瀏覽器</b>制作】

    請問Spring Boot是如何快速過濾出一次請求所有日志的?

    在現網出現故障時,我們經常需要獲取一次請求流程里的所有日志進行定位 。如果請求只在個線程里處理,則我們可以通過線程ID來過濾 日志 ,但如果請求
    的頭像 發表于 01-18 10:18 ?355次閱讀
    主站蜘蛛池模板: 操美女免费视频| 夜夜夜夜曰天天天天拍国产| 欧美色综合高清免费| 日本午夜片| 国产理论最新国产精品视频| 成人免费淫片95视频观看网站| 亚洲国产成人成上人色| 最好看的2019中文字幕1| 男啪女色黄无遮挡免费视频| 久久精品国产免费高清| 伊人蕉久| 色人阁婷婷| 看免费黄色大片| 大色视频| 午夜精品久久久久久久| 丁香婷婷九月| 国产高清免费| 一本到中文字幕高清不卡在线| 国产五月婷婷| videossexotv极度另类高清| 精品啪啪| 国产一级特黄aa级特黄裸毛片| 农村妇女野外一级毛片| 色播图片| 模特精品视频一区| 国产精品视频永久免费播放| 4hc44四虎www视频| 免费理论片在线观看播放| 天天久久| 国产精品久久久久影视不卡| 一区二区三区四区视频| 永久在线观看www免费视频| 色成年激情久久综合| 国产网站免费| 日本加勒比在线播放| 激情综合色五月丁香六月亚洲| jlzzjlzzjlzz亚洲女| 五月天亚洲综合| 国产精品久久福利网站| 亚洲成人毛片| 色免费观看|