详解从输入url到页面渲染

news2024/12/28 13:18:54

当你在浏览器中输入一个 URL 并按下回车键,浏览器会经历一系列步骤来加载并渲染页面。这些步骤包括 DNS 解析、缓存处理、建立连接、发送请求、接收响应、解析 HTML、构建 DOM 树和 CSSOM 树、执行 JavaScript、布局和绘制等。以下是这些步骤的详细解释,以及面试中常见的问题和细节。

1. 输入 URL 并按下回车

当你在浏览器中输入 URL 并按下回车键时,浏览器会开始处理这个请求。

2. DNS 解析

浏览器首先需要将域名解析为 IP 地址。这个过程称为 DNS 解析。

  • DNS 解析过程

    1. 浏览器缓存:浏览器会首先检查自己的 DNS 缓存,看看是否有对应的 IP 地址。
    2. 操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统查询 DNS 缓存。
    3. 路由器缓存:如果操作系统缓存中没有找到,操作系统会向路由器查询 DNS 缓存。
    4. ISP 缓存:如果路由器缓存中没有找到,路由器会向 ISP 的 DNS 服务器查询。
    5. 递归查询:如果 ISP 的 DNS 服务器中没有找到,DNS 服务器会进行递归查询,直到找到对应的 IP 地址。
  • 面试常见问题

    • 什么是 DNS 解析?
    • DNS 解析的过程是怎样的?
    • DNS 缓存的层级有哪些?

3. 检查缓存

在发送请求之前,浏览器会检查本地缓存(如 HTTP 缓存)中是否有对应的资源。如果有,并且缓存未过期,浏览器会直接从缓存中读取资源,而不需要发送请求。

  • 缓存机制

    • 强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。常见的 HTTP 头部字段有 Expires 和 Cache-Control
    • 协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。常见的 HTTP 头部字段有 Last-Modified 和 ETag
  • 面试常见问题

    • 什么是强缓存和协商缓存?
    • 强缓存和协商缓存的区别是什么?
    • 常见的 HTTP 缓存头部字段有哪些?

4. 建立连接

如果缓存中没有找到资源,浏览器会与服务器建立连接。这个过程包括以下步骤:

  • TCP 三次握手

    1. 客户端发送 SYN 包到服务器,表示请求建立连接。
    2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
    3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。
  • TLS 握手(如果使用 HTTPS):

    1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
    2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
    3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
    4. 服务器使用会话密钥加密通信。
  • 面试常见问题

    • 什么是 TCP 三次握手?
    • TCP 三次握手的过程是怎样的?
    • 什么是 TLS 握手?
    • TLS 握手的过程是怎样的?

5. 发送 HTTP 请求

建立连接后,浏览器会向服务器发送 HTTP 请求,包含请求方法(如 GET、POST)、请求头部和请求体等信息。

  • 面试常见问题
    • 常见的 HTTP 请求方法有哪些?
    • HTTP 请求头部字段有哪些?
    • GET 和 POST 请求的区别是什么?

6. 服务器处理请求并返回响应

服务器接收到请求后,会处理请求并返回 HTTP 响应,包含状态码、响应头部和响应体等信息。

  • 面试常见问题
    • 常见的 HTTP 状态码有哪些?
    • HTTP 响应头部字段有哪些?
    • 什么是 HTTP/2?它与 HTTP/1.1 的区别是什么?

7. 浏览器解析 HTML

浏览器接收到响应后,会开始解析 HTML 文档,并构建 DOM 树。

  • DOM 树构建

    • 浏览器从上到下解析 HTML 文档,遇到标签时创建对应的 DOM 节点,并按照层级关系构建 DOM 树。
  • 面试常见问题

    • 什么是 DOM?
    • DOM 树的构建过程是怎样的?

8. 解析 CSS

在解析 HTML 的过程中,浏览器会遇到 CSS 文件或内联样式,并开始解析 CSS,构建 CSSOM 树。

  • CSSOM 树构建

    • 浏览器解析 CSS 规则,创建对应的节点,并按照层级关系构建 CSSOM 树。
  • 面试常见问题

    • 什么是 CSSOM?
    • CSSOM 树的构建过程是怎样的?

9. 解析 JavaScript

在解析 HTML 的过程中,浏览器会遇到 JavaScript 文件或内联脚本,并开始解析和执行 JavaScript 代码。

  • JavaScript 执行

    • 浏览器会暂停 HTML 解析,直到 JavaScript 代码执行完毕。
    • JavaScript 代码可以操作 DOM 和 CSSOM,修改页面内容和样式。
  • 面试常见问题

    • JavaScript 的执行过程是怎样的?
    • 什么是阻塞渲染?如何避免?

10. 构建渲染树

浏览器将 DOM 树和 CSSOM 树结合,构建渲染树(Render Tree)。

  • 渲染树构建

    • 渲染树包含页面中可见的元素及其样式信息。
    • 不可见的元素(如 display: none)不会包含在渲染树中。
  • 面试常见问题

    • 什么是渲染树?
    • 渲染树的构建过程是怎样的?

11. 布局(Layout)

浏览器根据渲染树计算每个元素的位置和大小,这个过程称为布局(或回流)。

  • 布局过程

    • 从渲染树的根节点开始,递归计算每个节点的位置和大小。
  • 面试常见问题

    • 什么是布局(Layout)?
    • 什么是回流(Reflow)?如何避免?

12. 绘制(Painting)

浏览器根据布局结果,将每个元素绘制到屏幕上,这个过程称为绘制(或重绘)。

  • 绘制过程

    • 浏览器将渲染树中的每个节点转换为屏幕上的实际像素。
  • 面试常见问题

    • 什么是绘制(Painting)?
    • 什么是重绘(Repaint)?如何避免?

总结

浏览器从输入 URL 到渲染出页面的过程涉及多个阶段,每个阶段都有其特定的任务和细节。在面试中,常见的问题包括:

  • DNS 解析的过程和缓存机制。
  • HTTP 缓存的机制和头部字段。
  • TCP 三次握手和 TLS 握手的过程。
  • HTTP 请求和响应的结构和常见方法。
  • DOM 树和 CSSOM 树的构建过程。
  • JavaScript 的执行过程和阻塞渲染。
  • 渲染树的构建、布局和绘制过程。

通过理解这些细节,可以更好地回答面试中的相关问题,并展示对浏览器工作原理的深入理解。


@@@@@@@@@@@@


 

1. 什么是 DNS 解析?

DNS 解析是将域名转换为 IP 地址的过程。浏览器需要通过 DNS 解析来找到服务器的 IP 地址,以便发送请求。

2. DNS 解析的过程是怎样的?

DNS 解析过程

  1. 浏览器缓存:浏览器首先检查自己的 DNS 缓存。
  2. 操作系统缓存:如果浏览器缓存中没有找到,浏览器会向操作系统查询 DNS 缓存。
  3. 路由器缓存:如果操作系统缓存中没有找到,操作系统会向路由器查询 DNS 缓存。
  4. ISP 缓存:如果路由器缓存中没有找到,路由器会向 ISP 的 DNS 服务器查询。
  5. 递归查询:如果 ISP 的 DNS 服务器中没有找到,DNS 服务器会进行递归查询,直到找到对应的 IP 地址。

3. DNS 缓存的层级有哪些?

DNS 缓存的层级

  1. 浏览器缓存
  2. 操作系统缓存
  3. 路由器缓存
  4. ISP 缓存

4. 什么是强缓存和协商缓存?

强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。常见的 HTTP 头部字段有 Expires 和 Cache-Control

协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。常见的 HTTP 头部字段有 Last-Modified 和 ETag

5. 强缓存和协商缓存的区别是什么?

强缓存:浏览器直接从缓存中读取资源,不会向服务器发送请求。

协商缓存:浏览器向服务器发送请求,服务器根据请求头部字段判断资源是否更新。如果资源未更新,服务器返回 304 状态码,浏览器从缓存中读取资源。

6. 常见的 HTTP 缓存头部字段有哪些?

常见的 HTTP 缓存头部字段

  • Expires
  • Cache-Control
  • Last-Modified
  • ETag

7. 什么是 TCP 三次握手?

TCP 三次握手是建立 TCP 连接的过程,包括以下步骤:

  1. 客户端发送 SYN 包到服务器,表示请求建立连接。
  2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
  3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。

8. TCP 三次握手的过程是怎样的?

TCP 三次握手的过程

  1. 客户端发送 SYN 包到服务器,表示请求建立连接。
  2. 服务器收到 SYN 包后,回复 SYN-ACK 包,表示同意建立连接。
  3. 客户端收到 SYN-ACK 包后,回复 ACK 包,表示确认建立连接。

9. 什么是 TLS 握手?

TLS 握手是建立安全连接的过程,包括以下步骤:

  1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
  2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
  3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
  4. 服务器使用会话密钥加密通信。

10. TLS 握手的过程是怎样的?

TLS 握手的过程

  1. 客户端发送 ClientHello 消息,包含支持的加密算法等信息。
  2. 服务器回复 ServerHello 消息,选择加密算法,并发送服务器证书。
  3. 客户端验证服务器证书,并生成会话密钥,发送给服务器。
  4. 服务器使用会话密钥加密通信。

11. 常见的 HTTP 请求方法有哪些?

常见的 HTTP 请求方法

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • OPTIONS
  • PATCH

12. HTTP 请求头部字段有哪些?

常见的 HTTP 请求头部字段

  • Host
  • User-Agent
  • Accept
  • Content-Type
  • Authorization
  • Cookie
  • Referer

13. GET 和 POST 请求的区别是什么?

GET 请求

  • 用于请求数据。
  • 参数包含在 URL 中。
  • 参数长度有限制。
  • 不安全,参数在 URL 中可见。

POST 请求

  • 用于提交数据。
  • 参数包含在请求体中。
  • 参数长度没有限制。
  • 相对安全,参数在请求体中不可见。

14. 常见的 HTTP 状态码有哪些?

常见的 HTTP 状态码

  • 200 OK:请求成功。
  • 301 Moved Permanently:永久重定向。
  • 302 Found:临时重定向。
  • 304 Not Modified:资源未修改。
  • 400 Bad Request:请求错误。
  • 401 Unauthorized:未授权。
  • 403 Forbidden:禁止访问。
  • 404 Not Found:资源未找到。
  • 500 Internal Server Error:服务器内部错误。

15. HTTP 响应头部字段有哪些?

常见的 HTTP 响应头部字段

  • Content-Type
  • Content-Length
  • Set-Cookie
  • Cache-Control
  • Expires
  • Last-Modified
  • ETag

16. 什么是 HTTP/2?它与 HTTP/1.1 的区别是什么?

HTTP/2 是 HTTP 协议的第二个主要版本,主要改进包括:

  • 多路复用:在一个 TCP 连接上可以发送多个请求和响应。
  • 头部压缩:使用 HPACK 算法压缩头部,减少传输数据量。
  • 服务器推送:服务器可以主动推送资源到客户端。
  • 二进制分帧:将数据分成二进制帧,提高传输效率。

17. 什么是 DOM?

DOM(Document Object Model) 是 HTML 和 XML 文档的编程接口,表示文档的结构。DOM 将文档表示为节点和对象,开发者可以通过编程语言操作这些节点和对象。

18. DOM 树的构建过程是怎样的?

DOM 树的构建过程

  1. 浏览器从上到下解析 HTML 文档。
  2. 遇到标签时,创建对应的 DOM 节点。
  3. 按照层级关系将节点添加到 DOM 树中。

19. 什么是 CSSOM?

CSSOM(CSS Object Model) 是 CSS 的编程接口,表示 CSS 样式表的结构。CSSOM 将样式表表示为节点和对象,开发者可以通过编程语言操作这些节点和对象。

20. CSSOM 树的构建过程是怎样的?

CSSOM 树的构建过程

  1. 浏览器解析 CSS 规则。
  2. 创建对应的节点。
  3. 按照层级关系将节点添加到 CSSOM 树中。

21. JavaScript 的执行过程是怎样的?

JavaScript 的执行过程

  1. 浏览器遇到 <script> 标签时,暂停 HTML 解析。
  2. 解析并执行 JavaScript 代码。
  3. JavaScript 代码可以操作 DOM 和 CSSOM,修改页面内容和样式。
  4. JavaScript 代码执行完毕后,继续解析 HTML。

22. 什么是阻塞渲染?如何避免?

阻塞渲染 是指浏览器在解析 HTML 时遇到 <script> 标签,会暂停 HTML 解析,直到 JavaScript 代码执行完毕。这会导致页面渲染延迟。

避免阻塞渲染的方法

  • 将 <script> 标签放在页面底部,确保 HTML 解析完成后再执行 JavaScript。
  • 使用 async 或 defer 属性加载外部脚本,异步执行 JavaScript。

23. 什么是渲染树?

渲染树(Render Tree) 是浏览器将 DOM 树和 CSSOM 树结合,构建的用于渲染页面的树结构。渲染树包含页面中可见的元素及其样式信息。

24. 渲染树的构建过程是怎样的?

渲染树的构建过程

  1. 浏览器将 DOM 树和 CSSOM 树结合。
  2. 创建渲染树节点,表示页面中可见的元素及其样式信息。
  3. 按照层级关系将节点添加到渲染树中。

25. 什么是布局(Layout)?

布局(Layout) 是浏览器根据渲染树计算每个元素的位置和大小的过程。布局过程也称为回流(Reflow)。

26. 什么是回流(Reflow)?如何避免?

回流(Reflow) 是浏览器重新计算元素的位置和大小的过程。回流会导致页面重新布局,影响性能。

避免回流的方法

  • 尽量减少对 DOM 的操作。
  • 批量修改 DOM,而不是逐个修改。
  • 使用 documentFragment 批量操作 DOM。
  • 使用 position: absolute 或 position: fixed 脱离文档流,减少对其他元素的影响。

27. 什么是绘制(Painting)?

绘制(Painting) 是浏览器根据布局结果,将每个元素绘制到屏幕上的过程。绘制过程也称为重绘(Repaint)。

28. 什么是重绘(Repaint)?如何避免?

重绘(Repaint) 是浏览器重新绘制元素的过程。重绘不会影响布局,但会导致页面重新渲染,影响性能。

避免重绘的方法

  • 尽量减少对样式的修改。
  • 批量修改样式,而不是逐个修改。
  • 使用 class 切换样式,而不是逐个修改样式属性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从 GitLab.com 到 JihuLab.com 的迁移指南

本文分享从 GitLab.com 到 JihuLab.com 的迁移指南。 近期&#xff0c;GitLab Inc. 针对其 SaaS 产品做了限制&#xff0c;如果被判定为国内用户&#xff0c;则会建议使用其在国内的发布版本极狐GitLab。从 GitLab SaaS 产品&#xff08;GitLab.com&#xff09;迁移到极狐GitL…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

Python爬虫实战(保姆级登网页信息爬取教程)

此blog为爬虫实战教学&#xff0c;代码已附上&#xff0c;可以复制运行。若要直接看实战代码翻到博客后半部分。 本文使用selenium库进行爬虫&#xff0c;实现爬取数据操作&#xff0c;此库是通过模仿用户的操作进行对页面的处理。了解了这个思维模式&#xff0c;可以对代码进…

国产三维CAD正强势崛起

CAD软件作为现代工业设计和制造领域不可或缺的核心工具&#xff0c;其重要性不言而喻。它极大地提升了设计效率与精度&#xff0c;缩短了产品开发周期&#xff0c;为企业的创新与发展注入了强大动力。随着全球市场竞争的日益激烈&#xff0c;以及当前国际局势的复杂多变&#x…

编码滤波技术-SAO

1. AVS中的SAO样值偏移自适应补偿技术&#xff0c;首先将正在处理的块往左上移动了四行四列&#xff0c;超过图像边界的部分丢弃&#xff0c;右、下图像边界部分补齐。 也就是偏移前在图像边缘的块&#xff0c;进行去除和扩展得到偏移后的块。图像内部的块&#xff0c;正常往左…

Leetcode打卡:查询数组中元素出现的位置

执行结果&#xff1a;通过 题目 3159 查询数组中元素出现的位置 给你一个整数数组 nums &#xff0c;一个整数数组 queries 和一个整数 x 。 对于每个查询 queries[i] &#xff0c;你需要找到 nums 中第 queries[i] 个 x 的位置&#xff0c;并返回它的下标。如果数组中 x 的出…

【游戏设计原理】32 - 消费者剩余

1. 如何理解消费者剩余原理&#xff1f; 消费者剩余是一种经济学概念&#xff0c;表示消费者愿意为商品支付的最大金额与实际支付金额之间的差额。 简单来说&#xff0c;消费者剩余衡量了消费者从交易中获得的“额外价值”或“剩余利益”。 在传统商业模式下&#xff0c;由于…

肝功能不正常可以过教师入职体检吗?

如何看肝功能报告单 转氨酶正常等于肝功能正常吗?要想看懂肝功能报告单就要看懂各指标含义。 1、总胆红素TbiL正常值是 1.7-17.1μmol/L 急性黄疸型肝炎活动性肝炎肝坏死、肝癌、胰头癌都异常偏高。 2、直接胆红素 DbiL正常值是 0-6.84μmol/L 结石病、肝癌、胰头癌与这项…

CH340系列芯片驱动电路·CH340系列芯片驱动!!!

目录 CH340基础知识 CH340常见类型 CH340引脚功能讲解 CH340驱动电路 CH340系列芯片数据手册 编写不易&#xff0c;仅供学习&#xff0c;请勿搬运&#xff0c;感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路降压芯片驱动电路详解-CSDN博客 ME62…

(公开源码)基于springboot+vue的在线课程教学管理系统 计算机毕业设计P10046

项目说明 本号所发布的项目均由我部署运行验证&#xff0c;可保证项目系统正常运行&#xff0c;以及提供完整源码。 如需要远程部署/定制/讲解系统&#xff0c;可以联系我。定制项目未经同意不会上传&#xff01; 项目源码获取方式放在文章末尾处 注&#xff1a;项目仅供学…

UE5 把场景转成HDR图

目录 使用影片渲染队列 使用影片渲染队列 以下方法实测 UE5.4 有效 1.打开影片渲染队列窗口。依次打开&#xff1a;窗口—过场动画—影片渲染队列 2.添加Sequence动画。点击“渲染”按钮&#xff0c;选择要渲染的Sequence。 3.设置输出配置。 点击“Unsaved Config”打开配置…

使用RKNN进行YOLOv8人体姿态估计的实战教程:yolov8-pose.onnx转yolov8-pose.rknn+推理全流程

之前文章有提到“YOLOv8的原生模型包含了后处理步骤,其中一些形状超出了RK3588的矩阵计算限制,因此需要对输出层进行一些裁剪”,通过裁剪后得到的onnx能够顺利的进行rknn转换,本文将对转rnkk过程,以及相应的后处理进行阐述。并在文末附上全部源码、数据、模型的百度云盘链…

嵌入式硬件杂谈(八)电源的“纹波”到底是什么?

纹波的引入&#xff1a;在我们嵌入式设备中&#xff0c;很多时候电路电源的纹波很敏感&#xff0c;纹波太大会导致系统不工作&#xff0c;因此设计一个纹波很小的电路就是我们的需求了。 电路的纹波是什么&#xff1f; 纹波&#xff08;Ripple&#xff09;是指电源输出中叠加在…

水电站视频智能监控系统方案设计与技术应用方案

一、背景需求 水电站作为国家重要的能源基地&#xff0c;其安全运行对于保障能源供应和社会稳定具有重要意义。然而&#xff0c;传统的人工监控方式存在着诸多问题&#xff0c;如人力成本高、监控范围有限、反应不及时等。因此&#xff0c;水电站急需引进一种先进的视频智能监控…

MAC M4安装QT使用国内镜像源在线安装

MAC M4安装QT使用国内镜像源在线安装 一、下载安装包1. 访问[https://www.qt.io/](https://www.qt.io/)下载在线安装包2. 下载结果 二、创建QT账户&#xff0c;安装的时候需要三、安装1. 终端打开安装包2. 指定安装源3. 运行安装完的QT 一、下载安装包 1. 访问https://www.qt.…

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

CV(7)--神经网络训练

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 什么是神经网络&#xff1a; 神经网络是一种模拟人脑神经元工作原理的算法&#xff0c;它由多个神经元组成&#xff0c;每个神经元都接受输入&#xff0c;通过计算产生输出&#xff0c;并将输出传递给其他神经元。神经网络的…

python实战案例笔记:统计出数据中路劲下没有文件的文件夹

数据样例&#xff1a;&#x1f447;有如下excel数据 需求&#xff1a;有如下excel&#xff0c;a.xls&#xff0c;统计出路劲下没有文件的路劲 详细实现代码&#xff1a; import os from openpyxl import Workbook from datetime import datetimedef get_empty_dirs(paths):# …

API安全学习笔记

必要性 前后端分离已经成为web的一大趋势&#xff0c;通过TomcatNgnix(也可以中间有个Node.js)&#xff0c;有效地进行解耦。并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务&#xff08;多种客户端&#xff0c;例如&#xff1a;浏览器&#x…

金仓数据库对象访问权限的管理

基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等&#xff0c;都称为数据库对象&#xff0c;对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录&#xff0c;包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…