当你在浏览器地址栏输入 www.xx.com
并按下回车键,背后发生的事情非常复杂,但可以从 浏览器、操作系统、网络、服务器 这几个层面来梳理。下面我给你一个详细的流程解析:
1️⃣ 浏览器解析 URL
- 提取协议、域名、路径
www.xx.com
默认是http://www.xx.com
或https://www.xx.com
(HTTPS更常见)。- 浏览器会解析出:
- 协议(HTTP/HTTPS)
- 主机名(www.xx.com)
- 端口(默认80/443)
- 路径(如果没有,就是
/
)
- 检查缓存
- 浏览器会先检查本地缓存(内存缓存、硬盘缓存、Service Worker等)是否有可用内容,如果有则直接返回,不再发起请求。
2️⃣ DNS 解析(域名 -> IP)
- 浏览器缓存
- 浏览器会先看本地 DNS 缓存,是否记录了 www.xx.com 对应的 IP。
- 操作系统缓存
- 如果浏览器缓存没有,再问操作系统的 DNS 缓存。
- DNS 查询
- 若缓存都没有,操作系统会向本地配置的 DNS 服务器发起查询,通常是 ISP 或公共 DNS(如 8.8.8.8)。
- DNS 查询可能经过:
- 根 DNS → 顶级域名 DNS(.com)→ 权威 DNS(xx.com)
- 最终返回 www.xx.com 对应的 IP 地址
3️⃣ 建立 TCP 连接
- 三次握手 (Three-way Handshake)
- 浏览器知道服务器 IP 后,会通过 TCP 建立连接(HTTP/HTTPS 用的都是 TCP)。
- 三次握手过程:
- 客户端发送 SYN
- 服务器返回 SYN-ACK
- 客户端返回 ACK
- TLS 握手(如果是 HTTPS)
- 建立加密通道:
- 协商加密算法
- 交换证书并验证
- 生成会话密钥
- 建立加密通道:
4️⃣ 浏览器发送 HTTP 请求
- 请求行
GET / HTTP/1.1
- 请求头
- Host: www.xx.com
- User-Agent: 浏览器信息
- Cookie: 用户相关信息
- 请求体(POST 请求才有)
5️⃣ 服务器处理请求
- 接收 TCP 请求
- Web 服务器解析请求
- Nginx/Apache/Spring Boot 等服务器读取请求路径
- 路由到应用逻辑
- 应用生成 HTML、JSON 或重定向等响应
- 服务器返回 HTTP 响应
- 状态码:200/301/404/500
- 响应头:Content-Type, Set-Cookie 等
- 响应体:HTML、图片、JS、CSS 等
6️⃣ 浏览器接收响应并渲染页面
- 接收数据
- 浏览器读取 HTML 文本
- 解析 HTML
- 构建 DOM 树
- 解析 CSS
- 构建 CSSOM 树
- 合并 DOM + CSSOM → Render Tree
- 布局(Layout)
- 计算每个元素位置和大小
- 绘制(Painting)
- 把页面绘制到屏幕上
- 执行 JS
- 修改 DOM/CSSOM、发起 AJAX 请求、监听事件
- 资源加载
- 图片、字体、视频、JS 脚本异步加载
7️⃣ 后续行为
- 缓存资源:浏览器会缓存部分静态文件
- 发送分析/追踪请求:如 GA、埋点等
- 长连接保持:HTTP/2 或 HTTP/3 可能复用 TCP 连接,方便后续请求
💡 总结一句话:
从你敲下 www.xx.com
到页面显示,实际上是 浏览器发起 DNS 查询 → TCP/TLS 建立连接 → HTTP 请求 → 服务器响应 → 浏览器渲染页面 的完整流程,涉及网络协议、缓存机制、加密握手、DOM/CSS 渲染等多个复杂环节。
发表回复