【前端】面試八股文——輸入URL到頁面展示的過程

【前端】面試八股文——輸入URL到頁面展示的過程

1. DNS解析

當用戶在瀏覽器中輸入URL并按下回車時,首先需要將域名轉換為IP地址,這個過程稱為DNS(域名系統)解析。具體步驟如下:

  • 瀏覽器緩存:瀏覽器首先檢查自身緩存中是否有該域名的IP地址。
  • 操作系統緩存:如果瀏覽器緩存中沒有找到,瀏覽器會向操作系統請求DNS信息。
  • 路由器緩存:如果操作系統緩存也沒有找到,操作系統會向本地網絡中的路由器請求DNS信息。
  • ISP DNS服務器:如果路由器緩存沒有命中,路由器會向ISP提供的DNS服務器請求域名解析。
  • 遞歸查詢:如果ISP的DNS服務器也沒有找到,它會進行遞歸查詢,從根DNS服務器開始,逐級查詢頂級域(如.com)、二級域等,直到找到對應的IP地址。

2. TCP連接

獲得IP地址后,瀏覽器需要與服務器建立連接,這通常通過三次握手完成:

  • 第一次握手:瀏覽器(客戶端)發送一個帶有SYN標志的數據包到服務器,表示請求建立連接。
  • 第二次握手:服務器收到SYN數據包后,回復一個帶有SYN/ACK標志的數據包,表示同意建立連接。
  • 第三次握手:客戶端收到SYN/ACK數據包后,再回復一個帶有ACK標志的數據包,連接建立完成。

3. 發送HTTP請求

TCP連接建立后,瀏覽器會構建一個HTTP請求報文并發送到服務器:

  • 請求行:包含請求方法(如GET、POST)、URL和HTTP版本。
  • 請求頭:包含主機、用戶代理、接受的文件類型等信息。
  • 請求體:對于GET請求通常為空,對于POST請求包含提交的數據。

4. 服務器處理請求

服務器接收到HTTP請求后,會進行以下操作:

  • 請求解析:解析請求報文,提取請求的資源路徑和其他信息。
  • 資源查找:根據請求路徑查找對應的資源(如HTML文件、圖像等)。
  • 生成響應:將查找到的資源封裝到HTTP響應報文中,準備返回給客戶端。

5. 瀏覽器接收響應

瀏覽器接收服務器的響應報文,并進行解析:

  • 狀態行:包含HTTP版本、狀態碼(如200、404)和狀態描述。
  • 響應頭:包含內容類型、內容長度、服務器信息等。
  • 響應體:包含實際的資源內容(如HTML、CSS、JavaScript等)。

6. 渲染頁面

瀏覽器根據響應內容開始渲染頁面,步驟如下:

  • 解析HTML:瀏覽器解析HTML文件,構建DOM樹。
  • 解析CSS:解析CSS文件,構建CSSOM樹。
  • 構建渲染樹:將DOM樹和CSSOM樹合并,生成渲染樹。
  • 布局(layout):計算每個元素的大小和位置。
  • 繪制(painting):將渲染樹中的元素繪制到屏幕上。

7. 執行JavaScript

瀏覽器解析并執行HTML中的JavaScript:

  • 解析腳本:瀏覽器解析并執行內嵌的或外部引用的JavaScript。
  • 操作DOM:JavaScript可能會操作DOM,改變頁面內容。
  • 重新渲染:如果JavaScript修改了DOM,瀏覽器可能會重新計算布局和繪制頁面。

8. 加載其他資源

HTML文件中可能引用了其他資源(如圖片、視頻、字體等),瀏覽器會根據需要加載這些資源:

  • 并行加載:瀏覽器可以并行發送多個HTTP請求以加快資源加載速度。
  • 處理響應:每個資源的加載過程與主HTML文件類似,會經過DNS解析、TCP連接、HTTP請求和響應處理等步驟。

9. 建立安全連接(HTTPS)

如果使用HTTPS,瀏覽器在建立TCP連接后會進行SSL/TLS握手,以建立加密通道:

  • 協商加密算法:客戶端和服務器協商使用的加密算法。
  • 交換密鑰:客戶端和服務器交換密鑰,建立加密通信通道。
  • 驗證證書:客戶端驗證服務器的SSL證書是否有效。

10. 優化性能

瀏覽器會進行一些性能優化,以提高頁面加載速度和用戶體驗:

  • 緩存:緩存常用資源以減少重復加載。
  • 預加載:提前加載可能用到的資源。
  • 壓縮:對資源進行壓縮以減少傳輸的數據量。
  • 使用HTTP/2:HTTP/2支持多路復用、頭部壓縮等特性,提高傳輸效率。

通過這些詳細的步驟,輸入URL到頁面完全展示的整個過程得以實現。理解這個過程不僅有助于提升前端開發的技術水平,也有助于優化頁面加載速度,提高用戶體驗。

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

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

相關文章

科普文:Linux服務器性能調優概敘

概敘 Java web應用性能分析之服務端慢和優化概敘_cpu飆高java-CSDN博客 Java web應用性能分析之【CPU飆升分析概述】_web頁面性能分析cpu占滿是因為死循環,還是循環過多-CSDN博客 在我們的軟件服務中,軟件部署的服務器,一般都是linux服務器&#xff0c…

ubuntu20.04安裝lio-sam

1、boost版本 boost版本查看:cat /usr/include/boost/version.hpp | grep "BOOST_LIB_VERSION" boost版本為1.78,為1.71時編譯報錯,報錯內容為: error: missing binary operator before token "(" 60 |…

面向txt/json/xlsx/csv的文件讀寫及編碼問題

專欄介紹 1.專欄面向零基礎或基礎較差的機器學習入門的讀者朋友,旨在利用實際代碼案例和通俗化文字說明,使讀者朋友快速上手機器學習及其相關知識體系。 2.專欄內容上包括數據采集、數據讀寫、數據預處理、分類\回歸\聚類算法、可視化等技術。 3.需要強調的是,專欄僅介紹主…

每日一道算法題 彩燈裝飾記錄 I

題目 LCR 149. 彩燈裝飾記錄 I - 力扣(LeetCode) Python # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right …

Redis五種數據結構及其常用使用場景

引言 Redis 是一種高性能的鍵值對數據庫,支持多種數據類型,每種類型都有其獨特的使用場景和優勢。在本篇博客中,我們將深入探討 Redis 的五種主要數據結構:字符串(String)、哈希(Hash&#xff…

Java中的RPC遠程過程調用技術詳解

Java中的RPC遠程過程調用技術詳解 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在分布式系統中,RPC(Remote Procedure Call&#xf…

rtsp地址 + 測試網站 + java(免環境、免插件、零編碼轉換http播放)

目錄 1、創建rtsp網站 2、測試rtsp網站 3、Java實現rtsp播放 ①maven添加依賴 ②訪問http地址即可展示視頻內容 1、創建rtsp網站 填寫郵箱即可獲得兩個可用的rtsp網站(每月可免費用2G): https://rtsp.stream/ 2、測試rtsp網站 測試網絡…

基于SpringBoot的地方廢物回收機構管理系統

本系統主要包括管理員和員工兩個角色組成;主要包括:首頁、個人中心、員工管理、員工請假管理、銷假申請管理、工作日志管理、員工工資管理、員工任務管理、任務匯報管理、設備信息管理、設備借用管理、設備歸還管理、設備保修管理、維修入庫管理、員工打…

Python酷庫之旅-第三方庫Pandas(002)

目錄 一、用法精講 1、pandas.read_pickle函數 1-1、語法 1-2、參數 1-3、功能 1-4、返回值 1-5、說明 1-6、用法 1-6-1、代碼示例 1-6-2、結果輸出 2、pandas.DataFrame.to_pickle方法 2-1、語法 2-2、參數 2-3、功能 2-4、返回值 2-5、說明 2-5-1、文件路徑…

數據結構(3.8)——棧的應用

棧在括號匹配中的應用 流程圖 代碼 #include <stdio.h> #include <stdlib.h> #define MaxSize 10typedef struct {char data[MaxSize];int top; } SqStack;// 初始化棧 void InitStack(SqStack* S) {S->top -1; // 初始化棧頂指針 }// 判空 bool StackEmpty(…

Apache Hadoop完全分布式集群搭建指南

Hadoop發行版本較多,Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,簡稱CDH)收費版本通常用于生產環境,這里用開源免費的Apache Hadoop原始版本。 下載:Apache Hadoop 版本下載:Index of /hadoop/common Hadoop基礎知識可查看本專欄其它篇章:Apac…

《米小圈日記魔法》邊看邊學,輕松掌握寫日記的魔法!

在當今充滿數字化娛樂和信息快速變遷的時代&#xff0c;如何創新引導孩子們學習&#xff0c;特別是如何培養他們的寫作能力&#xff0c;一直是家長和教育者們關注的焦點。今天就向大家推薦一部寓教于樂的動畫片《米小圈日記魔法》&#xff0c;該系列動畫通過其獨特的故事情節和…

Linux安裝ftp、Java的FTP上傳下載文件工具類

Linux安裝ftp、Java的FTP上傳下載文件工具類 文章說明Linux安裝vsftpdJava的工具類 文章說明 網上找到說linux安裝ftp&#xff0c;采用vsftpd&#xff0c;在后續的配置中少了一些說明&#xff0c;給我折磨了許久&#xff0c;寫下這篇文章來記錄 Linux安裝vsftpd 命令非常簡單&a…

vue通過后臺返回的數字顯示不同的文字內容,多個內容用、隔開

后臺返回的數據 顯示效果&#xff1a; html&#xff1a; <el-table-columnalign"center"label"使用過的小程序"width"124"v-if"activeTab 0"><template #default"scope"><divv-for"(item, index) in s…

數據結構(3.5)——隊列的順序實現

隊列的順序實現 #define MaxSize 10//定義隊列中元素的最大個數 typedef struct {int data[MaxSize];//用靜態數組存放隊列元素int front, rear;//隊頭指針和隊尾指針 } SqQueue;void testQueue() {SqQueue Q;//聲明一個隊列(順序存儲) } 隊列的初始化操作和判空 //初始化隊…

大模型面試題目

1.為什么需要做位置編碼 位置編碼&#xff08;Positional Encoding&#xff09;在變換器&#xff08;Transformer&#xff09;模型中非常重要&#xff0c;因為變換器架構本身沒有內置的順序信息。變換器使用的是自注意力機制&#xff0c;它能夠捕捉輸入序列中所有詞之間的相關性…

論文解析——Transformer 模型壓縮算法研究及硬件加速器實現

作者及發刊詳情 鄧晗珂&#xff0c;華南理工大學 摘要 正文 實驗平臺 選取模型&#xff1a; T r a n s f o r m e r b a s e Transformer_{base} Transformerbase? 訓練數據集&#xff1a;WMT-2014 英語-德語翻譯數據集、IWSLT-2014 英語-德語互譯數據集 Transformer模…

JVM垃圾回收性能調優實戰指南

JVM垃圾回收性能調優實戰指南 一、引言 在Java應用程序中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;是自動管理內存的重要機制。然而&#xff0c;不恰當的垃圾回收配置可能導致性能瓶頸&#xff0c;如頻繁的GC暫停、內存碎片過多等。因此&#xff…

kpatch制作內核熱補丁步驟總結

零、原理及參考 kpatch入門實踐教程-CSDN博客 Kpatch 使用過程及其原理-CSDN博客 一、準備工作 安裝對應版本的kpatch-build.rpm并解決依賴diff -Naur dir1 dir2 > hot.patch 拿到補丁文件下載對應內核版本的src.rpm安裝好對應的開發包kernel-debuginfo&#xff0c;kern…

從GPT-1到GPT-3 預訓練語言模型的演進與突破

本文由 ChatMoney團隊出品 前言 Generative Pre-trained Transformer&#xff08;GPT&#xff09;系列是由OpenAI開發的預訓練語言模型&#xff0c;它們在多種NLP任務中取得了令人矚目的成績&#xff0c;包括文章生成、代碼生成、機器翻譯和問答等。GPT系列模型的核心思想是通…