說說地址欄輸入 URL 敲下回車後發生了什麼?

来源:https://www.cnblogs.com/smileZAZ/p/18113349
-Advertisement-
Play Games

一、簡單分析 簡單的分析,從輸入 URL到回車後發生的行為如下: URL解析 DNS 查詢 TCP 連接 HTTP 請求 響應請求 頁面渲染 二、詳細分析 URL解析 首先判斷你輸入的是一個合法的URL 還是一個待搜索的關鍵詞,並且根據你輸入的內容進行對應操作 URL的解析第過程中的第一步,一個ur ...


一、簡單分析

簡單的分析,從輸入 URL到回車後發生的行為如下:

  • URL解析
  • DNS 查詢
  • TCP 連接
  • HTTP 請求
  • 響應請求
  • 頁面渲染

二、詳細分析

URL解析

首先判斷你輸入的是一個合法的URL 還是一個待搜索的關鍵詞,並且根據你輸入的內容進行對應操作

URL的解析第過程中的第一步,一個url的結構解析如下:

DNS查詢

在之前文章中講過DNS的查詢,這裡就不再講述了

整個查詢過程如下圖所示:

最終,獲取到了功能變數名稱對應的目標伺服器IP地址

TCP連接

在之前文章中,瞭解到tcp是一種面向有連接的傳輸層協議

在確定目標伺服器伺服器的IP地址後,則經歷三次握手建立TCP連接,流程如下:

發送 http 請求

當建立tcp連接之後,就可以在這基礎上進行通信,瀏覽器發送 http 請求到目標伺服器

請求的內容包括:

  • 請求行
  • 請求頭
  • 請求主體

響應請求

當伺服器接收到瀏覽器的請求之後,就會進行邏輯操作,處理完成之後返回一個HTTP響應消息,包括:

  • 狀態行
  • 響應頭
  • 響應正文

在伺服器響應之後,由於現在http預設開始長連接keep-alive,當頁面關閉之後,tcp鏈接則會經過四次揮手完成斷開

頁面渲染

當瀏覽器接收到伺服器響應的資源後,首先會對資源進行解析:

  • 查看響應頭的信息,根據不同的指示做對應處理,比如重定向,存儲cookie,解壓gzip,緩存資源等等
  • 查看響應頭的 Content-Type的值,根據不同的資源類型採用不同的解析方式

關於頁面的渲染過程如下:

  • 解析HTML,構建 DOM 樹
  • 解析 CSS ,生成 CSS 規則樹
  • 合併 DOM 樹和 CSS 規則,生成 render 樹
  • 佈局 render 樹( Layout / reflow ),負責各元素尺寸、位置的計算
  • 繪製 render 樹( paint ),繪製頁面像素信息
  • 瀏覽器會將各層的信息發送給 GPU,GPU 會將各層合成( composite ),顯示在屏幕上

參考文獻

  • https://github.com/febobo/web-interview/issues/141
  • https://zhuanlan.zhihu.com/p/80551769

如果對您有所幫助,歡迎您點個關註,我會定時更新技術文檔,大家一起討論學習,一起進步。

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 稍微有點 Linux 經驗的人一定會遇到過 “Too many open files” 錯誤,這個錯誤本質是 ulimit 設置不合理導致的。關於 ulimit 設置,有哪些需要註意的點呢?本文給大家做一個介紹,希望對大家有所幫助。 如何確認 ulimit 設置生效了? 很多人設置了 ulimit ...
  • 一、Progress Progress組件是一種用戶界面(UI)元素,用於向用戶顯示某些任務的進度。它通常以進度條的形式出現,顯示任務完成的百分比。Progress組件可以在確定任務持續時間未知的情況下提供有用的反饋,幫助用戶瞭解任務的狀態和進度。 在Web應用程式中,Progress組件通常是 ...
  • iOS項目環境搭建和依賴管理 一個項目總是會依賴一些庫, 有些是第三方的, 有些可能是項目自身為了復用拆出去的. 現有主流的iOS依賴有多種形式, 比如CocoaPods, Carthage和swift package. 本文是一些環境搭建和使用項目依賴相關的筆記. 全局環境準備 基本上iOS開發都 ...
  • 一、Toggle Toggle組件是一個互動式UI組件,用於切換兩種狀態之間的選擇或開關。它通常用於表示開關按鈕,例如在設置中啟用或禁用某些選項。 在Toggle組件中,用戶可以點擊按鈕來切換狀態,或者使用鍵盤或其他輸入設備上的快捷鍵。通常,Toggle組件會在用戶點擊或切換狀態時觸發一個事件, ...
  • 一、Radio Radio單選框是一種表單元素,允許用戶從一組選項中選擇一個選項。它由一個圓圈和一個標簽組成,用戶只能選擇其中一個選項。Radio單選框通常用於表單中,用於收集用戶選擇的信息,例如用戶性別、年齡、愛好等等。 Radio單選框的作用是允許用戶從有限的選項中進行選擇,使表單填寫更加快 ...
  • 安裝react-native-fs npm npm install react-native-fs --save yarn yarn add react-native-fs 安卓配置 android/settings.gradle ... include ':react-native-fs' pro ...
  • nvm nvm(Node Version Manager)是一個Node.js的版本管理器。 安裝nvm windows安裝nvm 1. 下載nvm 下載地址:nvm-windows,下載 nvm-noinstall 或者 nvm-setup.exe 如果使用 nvm-noinstall 可以運行 ...
  • 大家好,我是 Java陳序員。 今天,給大家介紹一個基於 Vue3 實現的高仿抖音開源項目。 關註微信公眾號:【Java陳序員】,獲取開源項目分享、AI副業分享、超200本經典電腦電子書籍等。 項目介紹 douyin —— 一個基於 Vue、Vite 實現,模仿抖音的移動端短視頻項目。 這個項目的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...