為什么輸入 URL 后會顯示頁面?HTTP 協議的 “幕后操作”

🚀 瀏覽器輸入URL后,到底發生了什么?前端面試HTTP協議深度解析

今天咱們不聊八卦,來點硬核的——前端面試中繞不開的HTTP協議。是不是一提到“瀏覽器輸入URL后發生了什么”,你就開始頭大?別擔心,今天我將用最通俗易懂、最風趣幽默的方式,帶你揭開這層神秘的面紗,保證讓你聽完茅塞頓開,面試官都得給你點贊!

想象一下,你每天都在瀏覽器里敲下各種網址,比如www.juejin.cn,然后按下回車,神奇的事情就發生了:頁面瞬間呈現在你眼前。這背后,可不是簡單的“biu”一下就完事兒了,它涉及到一系列復雜而又精妙的流程。今天,我們就來當一回“福爾摩斯”,一步步揭秘這個過程!

在這里插入圖片描述

? 瀏覽器與服務器的“愛恨情仇”:從URL到頁面渲染

整個過程可以概括為:瀏覽器向服務器發出請求,服務器處理請求并返回數據,瀏覽器接收數據并渲染頁面。聽起來很簡單?別急,細節決定成敗!
在這里插入圖片描述

🔍 第一幕:URL的“身份驗證”

當你輸入URL并按下回車的那一刻,瀏覽器可不是個“傻白甜”,它會先對你輸入的URL進行一番“身份驗證”:

  1. URL合法性檢查:瀏覽器會先檢查你輸入的URL是否符合規范,比如是不是http://https://開頭,域名格式對不對等等。就像你去銀行辦業務,得先看看你是不是帶了身份證,格式對不對。

  2. 緩存檢查:如果這個URL你之前訪問過,瀏覽器會先看看本地有沒有緩存。如果有,那恭喜你,直接從緩存里拿出來顯示,速度那叫一個快!就像你點外賣,如果上次點的還有剩,直接熱一下就能吃,省去了等待配送的時間。如果沒有,那就得老老實實走接下來的流程了。

📞 第二幕:DNS解析——“尋址”之旅

如果緩存里沒有,或者URL是第一次訪問,瀏覽器就需要知道服務器的“家庭住址”——IP地址。這就需要進行DNS(Domain Name System)解析了。DNS就像一個巨大的電話本,你告訴它域名(比如www.juejin.cn),它就能告訴你對應的IP地址(比如104.21.48.175)。
在這里插入圖片描述

這個過程通常是這樣的:

  1. 瀏覽器緩存:瀏覽器會先檢查自己的DNS緩存,看看有沒有這個域名的IP地址。
  2. 操作系統緩存:如果沒有,就去操作系統的DNS緩存里找。
  3. 路由器緩存:再沒有,就去路由器的DNS緩存里找。
  4. ISP DNS服務器:如果以上都沒有,就會向你的互聯網服務提供商(ISP)的DNS服務器發起請求。
  5. 根域名服務器、頂級域名服務器、權威域名服務器:ISP的DNS服務器會一層層地向上查詢,直到找到對應的IP地址。這個過程就像你找一個陌生人的電話,先問朋友,朋友不知道就問朋友的朋友,直到找到認識他的人。

🤝 第三幕:TCP三次握手——“建立連接”的儀式

拿到IP地址后,瀏覽器就可以和服務器建立連接了。這里就要用到TCP(Transmission Control Protocol)協議,它就像是網絡世界的“紅娘”,負責在瀏覽器和服務器之間建立可靠的連接。這個建立連接的過程,就是著名的“TCP三次握手”。

  1. 第一次握手(SYN):瀏覽器(客戶端)向服務器發送一個SYN(同步序列號)報文,表示“我想和你建立連接,你準備好了嗎?”
  2. 第二次握手(SYN+ACK):服務器收到SYN報文后,如果同意建立連接,就會回復一個SYN+ACK(同步確認)報文,表示“我準備好了,你也準備好了嗎?”
  3. 第三次握手(ACK):瀏覽器收到SYN+ACK報文后,再回復一個ACK(確認)報文,表示“我準備好了,咱們開始通信吧!”

至此,瀏覽器和服務器之間的“秘密通道”就建立起來了,可以開始愉快地傳輸數據了!

📩 第四幕:HTTP請求與響應——“你來我往”的對話

連接建立后,瀏覽器就可以向服務器發送HTTP請求了。HTTP(Hypertext Transfer Protocol)協議就像是瀏覽器和服務器之間交流的“語言”。

在這里插入圖片描述

HTTP請求:瀏覽器會發送一個HTTP請求報文,里面包含了它想要獲取的資源(比如網頁、圖片、CSS文件等)、請求方法(GET、POST等)、請求頭(User-Agent、Cookie等)以及請求體(POST請求時攜帶的數據)。

HTTP響應:服務器收到請求后,會根據請求內容進行處理,然后返回一個HTTP響應報文。響應報文里包含了狀態碼(200 OK、404 Not Found等)、響應頭(Content-Type、Cache-Control等)以及響應體(實際的網頁內容、圖片數據等)。

👋 第五幕:TCP四次揮手——“斷開連接”的告別

當數據傳輸完畢,或者一方不再需要通信時,就需要斷開連接了。這個過程就是“TCP四次揮手”,它比三次握手要復雜一些,因為雙方都需要確認對方已經沒有數據要發送了。
在這里插入圖片描述

  1. 第一次揮手(FIN):瀏覽器(客戶端)發送一個FIN(結束)報文,表示“我沒有數據要發給你了。”
  2. 第二次揮手(ACK):服務器收到FIN報文后,回復一個ACK報文,表示“我收到了你的結束請求。”此時,服務器可能還有數據要發送給客戶端。
  3. 第三次揮手(FIN):服務器發送完所有數據后,也會發送一個FIN報文,表示“我也沒有數據要發給你了。”
  4. 第四次揮手(ACK):瀏覽器收到服務器的FIN報文后,回復一個ACK報文,表示“我收到了你的結束請求。”

至此,瀏覽器和服務器之間的連接就徹底斷開了。

🔄 第六幕:緩存處理與頁面渲染——“畫龍點睛”的藝術

當瀏覽器收到HTTP響應后,它會先檢查響應頭,看看是否可以緩存。如果可以,就會把資源存入緩存,方便下次直接使用。然后,就進入了激動人心的頁面渲染階段!
在這里插入圖片描述

瀏覽器頁面渲染:這是一個復雜而又精妙的過程,它將服務器返回的HTML、CSS、JavaScript等文件,最終呈現在你的屏幕上。

  1. 獲取HTML文件并解析,形成DOM Tree:瀏覽器會從上到下解析HTML文件,將HTML標簽解析成一個個節點,最終形成一個樹狀結構,這就是DOM(Document Object Model)Tree。它就像是頁面的“骨架”。

  2. 同時進行CSS解析,生成CSS Tree:瀏覽器在解析HTML的同時,也會解析CSS文件,將CSS樣式解析成CSS規則,形成CSSOM(CSS Object Model)Tree。它就像是頁面的“皮膚”。

  3. 將DOM Tree與CSS Tree合成Render Tree:DOM Tree和CSS Tree結合起來,就形成了Render Tree(渲染樹)。Render Tree只包含需要顯示在頁面上的節點和它們的計算樣式,那些不需要顯示的節點(比如display: none的元素)是不會出現在Render Tree中的。它就像是頁面的“帶妝照”,只包含最終要展示出來的部分。

  4. 進入布局(Layout)階段:布局階段也叫回流(Reflow),它會根據Render Tree計算每個節點在屏幕上的精確位置和大小。就像是給“帶妝照”上的每個元素都標上坐標,確定它們在哪里,占多大地方。

  5. 調用GPU進行繪制(Paint):繪制階段也叫重繪(Repaint),它會遍歷Render Tree的節點,并調用GPU將元素呈現出來。就像是根據布局階段計算好的坐標,用畫筆把頁面上的所有元素畫出來,最終呈現在你的屏幕上。

🔧 總結與展望

從你敲下URL的那一刻,到頁面呈現在你眼前,這背后經歷了URL合法性檢查、緩存檢查、DNS解析、TCP三次握手、HTTP請求與響應、TCP四次揮手、緩存處理以及最終的頁面渲染等一系列復雜而又環環相扣的流程。理解這些,不僅能讓你在面試中游刃有余,更能幫助你更好地理解前端性能優化、網絡安全等深層知識。

希望這篇博客能讓你對HTTP協議和瀏覽器渲染過程有一個全新的認識。如果你還有什么疑問,或者想了解更多前端知識,歡迎在評論區留言,我們一起探討!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94743.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

內網穿透原理和部署教程

前言:本文介紹了內網穿透技術原理及frp工具的部署方法。由于NAT映射表是臨時且單向的,外網無法直接訪問內網服務。通過部署公網服務器作為中轉,frp實現了內網服務的穿透訪問。具體步驟包括:下載frp軟件包,詳細說明了配…

Ping32:為企業數據安全筑起銅墻鐵壁?

Ping32:為企業數據安全筑起銅墻鐵壁在數字經濟飛速發展的今天,企業數據已成為核心競爭力的重要組成部分。然而,數據泄露事件頻發,給企業帶來的損失難以估量。從商業機密外泄到客戶信息曝光,每一次數據安全事故都可能讓…

2025年國內iPaaS平臺精選

在過去幾年里,許多企業在業務系統中面臨了諸多有關集成的難題:系統建好了,數據流不動;接口打通了,流程仍卡頓;工具堆疊越來越多,但協同效率反而走低。 這并不是架構設計的問題,也不是…

AD繪制PCB之-板外形設計

1、通過機械層1 【Mechanical 1】繪制出板子輪廓2、選中上面繪制得輪廓先選中一條邊,然后按tab鍵,可以自動選擇這條邊閉合得線條3、按照選擇對象定義設計--->板子形狀------>按照選擇對象定義執行后得效果:4、根據需要設置板子四角為半…

《匯編語言:基于X86處理器》第12章 浮點數處理與指令編碼(2)

Intel X86架構數據的運算主要由通用寄存器處理,但浮點數例外,浮點數的運算由專門的FPU寄存器處理。二進制浮點數由三部分組成:符號,有效數字和階碼。這些格式都出自由IEEE組織制定的標準754-1985:以下是三種浮點數的格…

vue3通過按鈕實現橫向滾動、鼠標滾動橫坐標滾動

效果圖&#xff1a;可點擊左右文字進行滾動、或通過滾動鼠標 內容左右滾動<template><div class"Home"><div style"display: flex;height: 100%;align-items: center;"><div click"scrollLeft()" style"width: 80px;t…

【Agent】AutoGen:LLM驅動的多Agent對話框架

文章目錄一、AutoGen簡介1.1 AutoGen的特點1.2 AutoGen的實現1.2.1 可對話Agent1.2.2 對話編程二、基于AutoGen構建多智能體系統2.1 構建步驟2.1 協作模式2.2 通信模型2.3 人機協同2.4 具體示例參考資料一、AutoGen簡介 AutoGen是微軟推出的一個Multi-Agent框架&#xff0c;允…

乙巳年閏六月十六凌晨感懷

乙巳年閏六月十六凌晨感懷 一段歷程一段情&#xff0c;兒郎崢嶸兒郎行。 歲月流金建功業&#xff0c;春秋風尚能潮贏。 路途苦樂人生度&#xff0c;評說成敗當下名。 百年孤寂留水墨&#xff0c;千載獨步守安寧。

Redis 分布式Session

一、引入依賴引入spring-session-data-redis依賴&#xff0c;不需要指定version&#xff0c;默認和springboot的version保持一致<!-- Spring Session Redis --> <dependency><groupId>org.springframework.session</groupId><artifactId>spring…

JAVA實現附件分片上傳

項目需求由于文件服務器的限制&#xff0c;單次調用文件上傳接口上傳的附件的大小不能超過500MB&#xff0c;對于超過500MB的附件需要分片上傳程序示例private Boolean uploadFile(File uploadFile, String uploadUrl, List<Object> fileList) {final long CHUNK_SIZE 5…

PyTorch環境安裝

pytorch安裝 建議&#xff08;非常強烈的那種&#xff09;用Anaconda創建一個虛擬環境&#xff0c;用于運行安裝你的PyTorch conda create -n universal python3.9 1. 基礎認知 cuDNN&#xff08;CUDA Deep Neural Network library&#xff09;是 NVIDIA 開發的用于深度學習…

機場風云:AI 云廠商的暗戰,廣告大戰一觸即發

文 | 大力財經機場廣告牌背后&#xff0c;一場決定云計算未來格局的隱形戰爭已悄然打響。當你匆匆走過首都機場T3航站樓的通道&#xff0c;巨幅屏幕上“阿里云&#xff1a;開源的力量”與不遠處“百度智能云&#xff1a;AI落地領導者”的廣告交相輝映。它們精準鎖定著日均10萬的…

MLE-STAR:谷歌AI推出的機器學習工程新范式,一種搜索驅動、精準優化的智能代理

最近看到 Google AI 發布了一個叫 MLE-STAR&#xff08;Machine Learning Engineering via Search and Targeted Refinement&#xff09;的新系統&#xff0c;說實話&#xff0c;第一眼看完論文和相關介紹后&#xff0c;我是有點震撼的。這不只是一次簡單的“LLM 自動化”拼湊…

3-防火墻

防火墻 一 防火墻概述防火墻概述防火墻是一個位于內部網絡與外部網絡之間的安全系統&#xff08;網絡中不同區域之間&#xff09;&#xff0c;是按照一定的安全策略建立起來的硬件或軟件系統&#xff0c;用于流量控制的系統&#xff08;隔離&#xff09;&#xff0c;保護內部網…

python opencv 調用 海康威視工業相機(又全又細又簡潔)

1.準備工作 準備一個海康相機 下載MVS 和SDK 海康機器人-機器視覺-下載中心 2.python MVS示例 &#xff08;說明&#xff1a;MVS里有很多python示例&#xff0c;可以直接運行&#xff0c;但沒有用opencv&#xff09; 下載完MVS后&#xff0c;我們打開路徑安裝路徑 我的&#…

計算機基礎·linux系統

Finalshell 用于遠程操控vmware中的linux系統 獲取虛擬機的IP地址 ifconfig命令&#xff0c;重啟系統后IP地址可能會變化&#xff01;問題&#xff1a;vmware子系統沒有網絡連接 winRservices.msc啟動這些服務問題&#xff1a;配置正確但是finalshell連接失敗 更新子系統中的ss…

8.結構健康監測選自動化:實時數據 + 智能分析,遠超人工

第一次接觸結構健康自動化監測系統&#xff0c;感覺成本很高&#xff0c;比人工好在哪里&#xff1f; 人工檢測是依靠目測檢查或借助于便攜式儀器測量得到的信息&#xff0c;但是隨著整個行業的發展&#xff0c;傳統的人工檢測方法已經不能滿足檢測需求&#xff0c;從人工檢測到…

【慕伏白】Android Studio 配置國內鏡像源

文章目錄配置HTTP代理修改 gradle 鏡像地址修改 maven 鏡像源重新同步配置HTTP代理 進入File --> Settings --> Appearance & Behavior --> System Settings --> HTTP Proxy 勾選 Auto-detect proxy settings --> Automatic proxy configuration URL &…

Spring Cloud系列—LoadBalance負載均衡

上篇文章&#xff1a; Spring Cloud系列—Eureka服務注冊/發現https://blog.csdn.net/sniper_fandc/article/details/149937589?fromshareblogdetail&sharetypeblogdetail&sharerId149937589&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link …

如何使用 pnpm創建Vue 3 項目

? 一、什么是 pnpm&#xff1f; pnpm 是一種更快、更高效的 Node 包管理工具&#xff0c;替代 npm 或 yarn&#xff0c;具有&#xff1a; 更快的安裝速度更節省磁盤空間&#xff08;包復用&#xff09;嚴格的依賴管理二、使用 pnpm 創建 Vue 項目的完整流程 ? 第一步&#xf…