从输入网址到页面显示,整个过程可以分为以下几个核心阶段:
1. URL 解析与校验
- 浏览器首先判断输入的内容是搜索关键词还是合法 URL。
- 如果是 URL,会解析出协议(如
http:///https://)、域名(如www.baidu.com)、端口(默认 80/443)、路径(如/index.html)等信息。
2. DNS 域名解析
- 浏览器通过域名(如
www.baidu.com)查找对应的服务器 IP 地址。 - 查找顺序:浏览器缓存 → 系统缓存 → 路由器缓存 → DNS 递归查询(本地 DNS 服务器 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器)。
- 拿到 IP 地址后,浏览器就可以和目标服务器建立连接。
3. 建立 TCP 连接(三次握手)
-
浏览器与服务器通过 TCP 三次握手 建立可靠的传输连接:
- 客户端向服务器发送
SYN包,请求建立连接。 - 服务器回复
SYN+ACK包,确认请求并同步序列号。 - 客户端发送
ACK包,确认连接建立。
- 客户端向服务器发送
-
如果是 HTTPS 协议,还会在 TCP 连接建立后进行 TLS/SSL 握手,协商加密算法、交换密钥,确保后续通信加密。
4. 发送 HTTP 请求
- 浏览器向服务器发送 HTTP 请求报文,包含请求行(如
GET /index.html HTTP/1.1)、请求头(如Host、User-Agent、Cookie)、请求体(POST 请求时携带)。 - 服务器收到请求后,会根据请求路径和参数处理业务逻辑,生成响应数据。
5. 服务器处理请求并返回响应
- 服务器解析请求,查询数据库、生成动态页面或读取静态文件,然后返回 HTTP 响应报文。
- 响应包含状态码(如
200 OK、404 Not Found)、响应头(如Content-Type、Cache-Control)、响应体(HTML/CSS/JS 等资源)。
6. 浏览器渲染页面
-
浏览器收到响应后,开始解析和渲染页面,主要步骤:
- 解析 HTML → 生成 DOM 树。
- 解析 CSS → 生成 CSSOM 树。
- 合成渲染树 → 将 DOM 树与 CSSOM 树结合,生成渲染树。
- 布局(Layout) → 计算每个元素的位置和大小。
- 绘制(Paint) → 将元素绘制到屏幕上。
- 合成(Composite) → 将图层合并,最终显示在浏览器窗口。
7. 断开 TCP 连接(四次挥手)
-
页面加载完成后,浏览器与服务器通过 TCP 四次挥手 断开连接:
- 客户端发送
FIN包,请求关闭连接。 - 服务器回复
ACK包,确认关闭请求。 - 服务器发送
FIN包,准备关闭连接。 - 客户端回复
ACK包,确认连接关闭。
- 客户端发送
关键补充
- 缓存优化:浏览器会优先使用本地缓存的资源(如 CSS/JS/ 图片),减少网络请求,提升加载速度。
- CDN 加速:如果资源部署在 CDN,DNS 会解析到离用户最近的 CDN 节点,进一步缩短响应时间。
- 重定向处理:如果服务器返回
3xx状态码,浏览器会根据响应头的Location字段重新发起请求。