从输入 URL 到页面渲染:浏览器做了什么?

在我们每天开发网页时,是否想过:用户在浏览器输入一个网址,按下回车后,到页面最终展现,这中间到底发生了什么?

本文将系统梳理这个过程,从网络协议到浏览器渲染机制,一次讲清。


🧭 1. 用户输入 URL

当用户在地址栏输入 https://example.com/index.html

  • 浏览器自动补全协议(如省略 https://

  • 判断输入的是 URL 还是搜索词(如 github

  • 查询历史记录与书签提供建议


🌍 2. 解析 URL

浏览器将 URL 拆解为结构:

部分 示例
协议 https
主机名 example.com
路径 /index.html
查询参数 ?q=123
片段(锚点) #section1

🧠 3. DNS 查询

为了连接服务器,浏览器需要知道 example.com 对应的 IP 地址。

查找顺序:

  1. 浏览器 DNS 缓存

  2. 系统 DNS 缓存

  3. hosts 文件

  4. 本地路由器 DNS 缓存

  5. 网络运营商 DNS / 公共 DNS(如 8.8.8.8)

可使用 <link rel="dns-prefetch"> 提前解析 DNS。


🔒 4. 建立连接(TCP + TLS)

TCP 三次握手:

客户端与服务器建立连接:

  1. 客户端:SYN

  2. 服务端:SYN-ACK

  3. 客户端:ACK

HTTPS 额外执行:

  • TLS 握手:协商加密算法、交换证书、建立加密通道

📡 5. 发送 HTTP 请求

浏览器构建并发送 HTTP 请求:

http 复制代码
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Chrome/120 ...
Accept: text/html

可能包含 Cookie、Referer、Authorization 等头部。


🏭 6. 服务器响应

服务器处理请求,返回 HTML 或数据:

http 复制代码
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1536

<html>...</html>

也可能返回:

  • 301/302 重定向

  • 304 缓存命中

  • 401/403/404/500 错误状态


📥 7. 浏览器接收响应并处理重定向

  • 如是重定向(3xx),浏览器自动重新发起请求

  • HTML 内容则立即进入解析流程(Streaming Parser,边下载边解析)


🧱 8. 构建页面渲染树(渲染关键路径)

📌 浏览器的 Critical Rendering Path(关键渲染路径):

1. HTML → DOM 树

  • 解析 HTML,构建 DOM(文档对象模型)

2. CSS → CSSOM 树

  • 加载与解析 CSS,构建 CSSOM(样式结构)

3. DOM + CSSOM → Render Tree

  • 生成只包含可见元素的渲染树

4. Layout(回流)

  • 计算每个节点的位置与大小

5. Paint(重绘)

  • 将像素绘制到图层中

6. Compositing(合成)

  • 合成多个图层,送入 GPU 渲染帧缓冲区

🖼️ 9. 加载子资源

页面中 <script><img><link> 等标签引发:

  • 并发加载资源

  • JS 可设置 deferasync 避免阻塞渲染

  • 图片可懒加载(loading="lazy"


✅ 10. 页面完成渲染

浏览器触发两个重要事件:

事件 含义
DOMContentLoaded DOM 树构建完成,不等待图片
window.onload 所有资源(图片/iframe)加载完成

🧠 整体流程总结

text 复制代码
用户输入 URL
 ↓
URL 解析
 ↓
DNS 查询
 ↓
建立 TCP/TLS 连接
 ↓
发送 HTTP 请求
 ↓
服务器处理并响应
 ↓
浏览器接收 HTML
 ↓
HTML → DOM,CSS → CSSOM
 ↓
Render Tree → Layout → Paint
 ↓
加载其他资源
 ↓
页面可交互 ✅

🔧 开发者关注点(性能优化)

阶段 优化建议
DNS 查询 使用 CDN + DNS 预解析
请求阶段 Gzip 压缩、缓存控制
渲染阶段 控制 DOM 复杂度、懒加载图像
JavaScript 分包、Tree Shaking、合理使用 defer/async
图片资源 WebP/AVIF 格式、Lazyload、占位图优化

📎 补充阅读


✅ 总结一句话

"浏览器从输入网址到页面渲染,跨越了网络、协议、解析、布局与绘制,作为前端开发者,理解这一过程,是性能优化与工程质量的基石。"


如果你觉得这篇笔记有用,欢迎点赞收藏,后续我会写一篇**"浏览器渲染性能瓶颈分析与优化技巧"**,欢迎关注!

相关推荐
要加油哦~1 分钟前
vue | vue 插件化机制,全局注册 和 局部注册
前端·javascript·vue.js
猫头虎-前端技术19 分钟前
HTML 与 CSS 的布局机制(盒模型、盒子定位、浮动、Flexbox、Grid)问题总结大全
前端·javascript·css·vue.js·react.js·前端框架·html
Skrrapper23 分钟前
【三大前端语言之一】静态网页语言:HTML详解
前端·html
网小鱼的学习笔记24 分钟前
html中的table标签以及相关标签
开发语言·前端·python·html
天蓝色的鱼鱼27 分钟前
Vue重复提交防御体系从入门到精通
前端·vue.js
海的诗篇_1 小时前
前端开发面试题总结-vue2框架篇(四)
前端·css·面试·vue·html
用户426670591691 小时前
为什么说不可信的Wi-Fi不要随便连接?
前端
玺同学2 小时前
从卡顿到流畅:前端渲染性能深度解析与实战指南
前端·javascript·性能优化
光影少年2 小时前
vuex中的辅助函数怎样使用
前端·javascript
路人与大师2 小时前
2025年 6月面试 经验总结 生成式语言模型岗位
面试·生成式语言模型