一、URL 解析
在浏览器地址栏输入 URL 后,浏览器会先解析 URL,拆分出:
- 协议(http / https)
- 域名
- 端口号
- 路径
- 查询参数
二、DNS 解析
浏览器需要将域名解析为 IP 地址,查询顺序一般为:
- 浏览器 DNS 缓存
- 系统缓存(如 hosts 文件)
- 本地 DNS 服务器
- 递归查询根服务器、权威 DNS 服务器
最终获得服务器的真实 IP 地址。
三、建立连接(TCP / TLS)
拿到 IP 后,客户端与服务端开始建立连接。
1️⃣ TCP 三次握手
- 客户端发送 SYN,请求建立连接
- 服务端返回 SYN + ACK,表示同意
- 客户端返回 ACK,连接建立完成
2️⃣ TLS 握手(HTTPS)
- ClientHello:客户端发送支持的加密算法等信息
- ServerHello:服务端返回数字证书(包含公钥)
- 客户端校验证书合法性(CA、有效期、域名)
- 客户端生成对称密钥,用服务端公钥加密并发送
- 双方确认后,使用对称加密进行后续通信
四、HTTP 请求与缓存
浏览器发起 HTTP 请求前会进行缓存判断:
- 命中强缓存:直接使用本地资源,不发请求
- 未命中:向服务器发起请求,可能返回协商缓存或新数据
五、服务器处理请求并返回响应
服务器处理业务逻辑,返回 HTML、CSS、JS 等资源。
六、浏览器解析与渲染(前端重点)
-
解析 HTML,构建 DOM 树
-
解析 CSS,构建 CSSOM
- CSS 不阻塞 DOM 解析
- CSS 会阻塞渲染(Render Tree 的生成)
-
处理 JavaScript
- 普通 script:阻塞 DOM 解析
- defer:并行下载,DOM 解析完成后执行
- async:并行下载,下载完成立即执行
-
DOM + CSSOM → Render Tree
-
Layout(回流):计算元素位置和尺寸
-
Paint(重绘):绘制像素
-
Composite(合成):在需要时由 GPU 合成图层并显示到页面