从输入 URL 到页面呈现的完整过程解析 | 前端性能优化指南

2025/3/15
本文详细解析了从用户在浏览器输入 URL 到页面最终呈现的完整过程,包括 URL 解析、DNS 解析、TCP 连接建立、TLS 握手、HTTP 请求发送、服务器处理请求、接收 HTTP 响应、页面渲染、JavaScript 执行以及连接关闭等关键步骤。
浏览器地址栏输入 URL 的示意图,DNS 解析流程图,TCP 三次握手示意图,TLS 握手过程图解,HTTP 请求与响应流程图,页面渲染过程示意图

从输入 URL 到页面呈现的过程涉及多个步骤,主要包括以下几个阶段:

1. URL 解析

  • 输入 URL:用户在浏览器地址栏输入 URL(如 https://www.example.com)。
  • 解析 URL:浏览器解析 URL,提取协议(如 https)、主机名(如 www.example.com)、端口(如 443,默认情况下 HTTPS 使用 443 端口)、路径(如 /)和查询参数(如 ?query=value)。

2. DNS 解析

  • 查找缓存:浏览器首先检查本地缓存(如浏览器缓存、操作系统缓存、路由器缓存)中是否有对应的 IP 地址。
  • DNS 查询:如果缓存中没有找到,浏览器会向 DNS 服务器发起查询请求,获取目标域名的 IP 地址。这个过程可能涉及递归查询和迭代查询。

3. 建立 TCP 连接

  • 三次握手:浏览器通过 TCP 协议与服务器建立连接。这个过程包括:
    1. 客户端发送 SYN 包到服务器。
    2. 服务器响应 SYN-ACK 包。
    3. 客户端发送 ACK 包,完成三次握手,建立连接。

4. TLS 握手(HTTPS)

  • 协商加密协议:如果使用 HTTPS,客户端和服务器会进行 TLS 握手,协商加密算法和密钥。
  • 验证证书:客户端验证服务器的 SSL/TLS 证书,确保证书的有效性和可信性。

5. 发送 HTTP 请求

  • 构造请求:浏览器构造 HTTP 请求报文,包括请求行(如 GET / HTTP/1.1)、请求头(如 Host: www.example.comUser-Agent 等)和请求体(如 POST 请求的数据)。
  • 发送请求:通过已建立的 TCP 连接,浏览器将 HTTP 请求发送到服务器。

6. 服务器处理请求

  • 接收请求:服务器接收到请求后,解析请求报文,确定请求的资源和方法。
  • 处理请求:服务器根据请求的资源和方法,执行相应的处理逻辑(如查询数据库、调用 API 等)。
  • 生成响应:服务器生成 HTTP 响应报文,包括状态行(如 HTTP/1.1 200 OK)、响应头(如 Content-Type: text/html)和响应体(如 HTML 内容)。

7. 接收 HTTP 响应

  • 接收响应:浏览器接收到服务器的 HTTP 响应报文。
  • 解析响应:浏览器解析响应报文,提取状态码、响应头和响应体。

8. 渲染页面

  • 解析 HTML:浏览器解析 HTML 文档,构建 DOM 树。
  • 加载资源:浏览器根据 HTML 中的链接(如 CSS、JavaScript、图片等),发起额外的 HTTP 请求,加载这些资源。
  • 构建 CSSOM:浏览器解析 CSS 文件,构建 CSSOM 树。
  • 构建渲染树:浏览器将 DOM 树和 CSSOM 树合并,生成渲染树。
  • 布局(Layout):浏览器计算渲染树中每个节点的几何信息(如位置、大小等)。
  • 绘制(Paint):浏览器将渲染树中的节点绘制到屏幕上。

9. 执行 JavaScript

  • 解析和执行 JavaScript:浏览器解析并执行 HTML 中的 JavaScript 代码,可能会修改 DOM 或 CSSOM,触发重新布局和绘制。

10. 页面呈现

  • 最终呈现:浏览器完成所有资源的加载和渲染后,页面最终呈现给用户。

11. 连接关闭

  • 四次挥手:当页面加载完成后,浏览器和服务器可能会关闭 TCP 连接。这个过程包括:
    1. 客户端发送 FIN 包。
    2. 服务器响应 ACK 包。
    3. 服务器发送 FIN 包。
    4. 客户端响应 ACK 包,完成四次挥手,关闭连接。

总结

从输入 URL 到页面呈现的过程涉及多个网络协议(如 DNS、TCP、TLS、HTTP)和浏览器渲染机制。每个步骤都可能影响页面加载的性能和用户体验,因此在前端开发中,优化这些步骤(如减少 DNS 查询、使用 CDN、压缩资源、优化渲染路径等)是提升页面性能的关键。

上次更新:

相关文章

npx完全指南:前端开发必备工具详解 | 20年架构师深度解析

本文由20年前端架构师深入解析npx工具,涵盖其核心功能、优势、高级用法、最佳实践及与npm/yarn的区别比较,帮助开发者掌握这一现代前端开发利器。

·前端开发

<处理关联数据的最佳实践:Article 与 Tags 的关系 | 开发指南>

<本文详细介绍了在开发中处理关联数据(如 Article 和 Tags 的多对多关系)的最佳实践,包括拆分业务逻辑、使用事务保证数据一致性、合理设计关联表结构、批量操作、幂等性和乐观锁等关键要点,并提供了基于 mysql2 和 Sequelize 的代码示例。>

·后端开发

Astro 静态站点生成器:构建高性能网站的最佳选择

Astro 是一个专注于构建快速、轻量级网站的静态站点生成器,支持多种前端框架,采用岛屿架构减少 JavaScript 加载,提升性能。

·前端开发

MySQL外键约束详解:维护数据一致性与完整性

本文详细介绍了MySQL中的外键约束(Foreign Key Constraint),包括其基本概念、创建方法、作用、级联操作、限制、修改与删除方法、查看方式以及最佳实践。通过合理使用外键约束,可以有效管理数据库中的数据关系,确保数据的准确性和可靠性。

·后端开发

MySQL JSON数据类型支持与使用指南 | 详细解析与示例

本文详细解析了MySQL从5.7版本开始支持的JSON数据类型,包括版本支持、创建JSON字段、插入与查询JSON数据、修改JSON数据、生成JSON、索引优化、性能与应用场景、注意事项及示例全流程。

·后端开发

SQL JOIN、LEFT JOIN 和 RIGHT JOIN 的区别与应用场景详解

本文详细介绍了 SQL 中 JOIN、LEFT JOIN 和 RIGHT JOIN 的区别,包括它们的作用、语法、示例以及实际应用场景,帮助读者更好地理解和使用这些连接方式。

·后端开发

Weex 跨平台移动开发框架:核心特性与使用指南

Weex 是由阿里巴巴开源的跨平台移动开发框架,支持使用 Vue.js 或 Rax 构建高性能的 iOS、Android 和 Web 应用。本文详细解析了 Weex 的核心特性、架构、工作流程、组件和模块、开发工具、优缺点、应用场景及未来发展。

·前端开发

ECharts 与 DataV 数据可视化工具对比分析 | 选择指南

本文详细对比了 ECharts 和 DataV 两个常用的数据可视化工具,包括它们的设计目标、优缺点、使用场景和技术栈,帮助读者根据具体需求选择合适的工具。

·前端开发

前端部署后通知用户刷新页面的常见方案 | 单页应用更新提示

本文介绍了在前端部署后通知用户刷新页面的几种常见方案,包括WebSocket实时通知、轮询检查版本、Service Worker版本控制、版本号对比、自动刷新、使用框架内置功能以及第三方库。每种方案的优缺点和示例代码均有详细说明。

·前端开发

file-saver:前端文件下载的 JavaScript 库使用指南

file-saver 是一个用于在浏览器端保存文件的 JavaScript 库,支持生成和下载多种文件格式,如文本、JSON、CSV、图片、PDF 等。本文详细介绍其安装、基本用法、兼容性及与其他工具(如 jszip)的结合使用。

·前端开发