輸入網址到顯示網頁瀏覽器都幹了什麼

来源:https://www.cnblogs.com/luoshuifushen/archive/2020/03/20/12531107.html
-Advertisement-
Play Games

輸入地址到顯示頁面發生了什麼 [Toc] 簡單版 1. 瀏覽器發起DNS請求,解析功能變數名稱得到 地址 2. 封裝 請求報文,併發送給伺服器 3. 伺服器接收請求並處理請求,封裝 響應報發送會瀏覽器 4. 瀏覽器解析響應報文, 遇到新資源繼續請求 5. 瀏覽器根據解析結果生成 樹, 樹, 進行頁面佈局和渲 ...


目錄

輸入地址到顯示頁面發生了什麼

簡單版

  1. 瀏覽器發起DNS請求,解析功能變數名稱得到ip地址
  2. 封裝HTTP請求報文,併發送給伺服器
  3. 伺服器接收請求並處理請求,封裝HTTP響應報發送會瀏覽器
  4. 瀏覽器解析響應報文, 遇到新資源繼續請求
  5. 瀏覽器根據解析結果生成DOM樹, CSSOM樹, 進行頁面佈局和渲染
  6. 最終顯示完整頁面

詳細版

  1. 瀏覽器先查看緩存, 如果請求資源在緩存中且沒過期,使用緩存
    1. 如果資源沒有緩存,發起新請求
    2. 如果已緩存,檢查是否過期
      1. 沒有過期直接使用緩存
      2. 過期與伺服器進行驗證
  2. (資源未緩存)瀏覽器解析URL, 獲取請求協議,主機,埠,路徑信息
  3. 封裝一個HTTP請求報文
  4. 獲取IP地址
    1. 查看瀏覽器有沒有緩存這個IP地址
    2. 本機緩存中有沒有
    3. hosts文件有沒有
    4. DNS查詢
      DNS功能變數名稱解析過程
  5. 與目標IP伺服器建立TCP連接, 然後發送HTTP請求報文
  6. 伺服器接收請求並處理
  7. 伺服器檢查HTTP請求頭是否包含緩存驗證信息, 如果驗證沒有過期,返回304
  8. 組裝HTTP響應報文, 並將發送回瀏覽器
  9. 瀏覽器接收HTTP響應,然後根據情況選擇關閉TCP連接或保留重用
  10. 對響應報文體進行解碼
  11. 瀏覽器檢查響應狀態碼, 如果資源可以緩存,進行緩存
  12. 解析HTML結構,構建DOM樹, CSSOM
  13. 解析過程遇到新的資源繼續發送請求,直到所有資源都載入完畢
  14. 根據DOM樹和CSSOM構建渲染樹, 並對渲染樹進行佈局
    1. 解析HTML構建DOM
    2. 根據DOM樹,CSSOM樹構建渲染樹
      1. 不可見節點不會放入渲染樹
        • 不可見節點: script, meta這樣的節點本身不可見
        • CSS隱藏的元素(display: none, visibility:hidden)
    3. 對渲染樹進行佈局. 計算元素信息,確定大小,位置.
    4. 調用系統API進行繪圖操作,顯示頁面
      image.png
  15. 解析,執行JS(一般將JS放在末尾,所以JS的執行在DOM渲染之後)
    1. 語法檢查階段
      • 詞法分析
      • 語法分析
    2. 運行階段
      • 預解析
        1. 創建執行環境
          • 確定 變數對象
          • 確定 作用域
          • 確定 this
        2. 屬性填充(順序)
          • 函數參數(沒有傳入,初始化值為:undefined)
          • 函數聲明+定義(發生命名衝突會覆蓋)
          • 變數聲明(初始化值為:undefined, 發生命名衝突會忽略)
      • 代碼執行
        • js引擎一行行讀取代碼並執行
  16. 顯示頁面

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在大多數人眼裡,互聯網前端開發是一個有著高薪水、高職業榮譽感的行業。沒錯,隨著互聯網大環境的快速崛起,HTML5的發展,絕對屬於既有“錢景”還有前景的的朝陽行業。 高收入、前景光明,即使對前端開發的要求越來越高,也還是有許多新人願意來一試身手,紛紛打破頭往這個行業裡面涌。 都說一入前端深似海,從此節 ...
  • CSS 幾種常用的水平垂直居中對齊方法 [Toc] 文字的水平垂直居中 元素的水平垂直居中 1 使用絕對定位 2 使用絕對定位+ calc() 3. 使用絕對定位+transform 4. 使用display:flex; ...
  • Ext.define('MyTreeModel', { extend: 'Ext.data.Model', fields: [ 'name','url' ] }); var tree = Ext.create('Ext.tree.Panel',{ width:'200', height:'200', ...
  • CSS 百分比都是相對於誰計算 [Toc] 相對於父級元素寬高 + , , ,`padding text indent` ... 等 相對於父級定位元素寬高 + , , , 相對於自身寬高 + , , , 相對於自身字體大小 + 相對於繼承字體大小 + `font size` ...
  • 網頁優化 [Toc] 上一章介紹了 "從輸入地址到到顯示網頁瀏覽器都幹了什麼" ,絕大部分的優化都在這個過程中 減少HTTP請求 減少HTTP請求是優化的重要手段 1. 減少圖片使用 2. 對小圖標這一類圖片使用 合併, 或者使用 編碼圖片 1. 優點: 減少了請求 2. 缺點: 修改維護不方便, ...
  • 解釋一下web前端工作是做啥的,Web前端開發工程師,主要職責是利用(X)HTML/CSS/JavaScript/Flash等各種Web技術進行客戶端產品的開發。完成客戶端程式(也就是瀏覽器端)的開發,開發JavaScript以及Flash模塊,同時結合後臺開發技術模擬整體效果,進行豐富互聯網的We ...
  • //判斷數組是否包含某個值 var nArr = new Array();nArr.push('123');nArr.push('345'); if (nArr.indexOf(234) != -1) { alert('存在');} else { alert('不存在');} ...
  • /** * 驗證日期是否正確 * 日期格式:yyyy-mm-dd,yyyy-m-d,yyyy/mm/dd,yyyy/m/d */function checkDate(dateStr) { dateStr = dateStr.replace(/\//g, '-'); var dateReg = /^( ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...