說說地址欄輸入 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
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...