当你在浏览器地址栏输入 www.xx.com 并按下回车键,背后发生的事情非常复杂,但可以从 浏览器、操作系统、网络、服务器 这几个层面来梳理。下面我给你一个详细的流程解析:


1️⃣ 浏览器解析 URL

  1. 提取协议、域名、路径
    • www.xx.com 默认是 http://www.xx.com 或 https://www.xx.com(HTTPS更常见)。
    • 浏览器会解析出:
      • 协议(HTTP/HTTPS)
      • 主机名(www.xx.com)
      • 端口(默认80/443)
      • 路径(如果没有,就是 /
  2. 检查缓存
    • 浏览器会先检查本地缓存(内存缓存、硬盘缓存、Service Worker等)是否有可用内容,如果有则直接返回,不再发起请求。

2️⃣ DNS 解析(域名 -> IP)

  1. 浏览器缓存
    • 浏览器会先看本地 DNS 缓存,是否记录了 www.xx.com 对应的 IP。
  2. 操作系统缓存
    • 如果浏览器缓存没有,再问操作系统的 DNS 缓存。
  3. DNS 查询
    • 若缓存都没有,操作系统会向本地配置的 DNS 服务器发起查询,通常是 ISP 或公共 DNS(如 8.8.8.8)。
    • DNS 查询可能经过:
      • 根 DNS → 顶级域名 DNS(.com)→ 权威 DNS(xx.com)
    • 最终返回 www.xx.com 对应的 IP 地址

3️⃣ 建立 TCP 连接

  1. 三次握手 (Three-way Handshake)
    • 浏览器知道服务器 IP 后,会通过 TCP 建立连接(HTTP/HTTPS 用的都是 TCP)。
    • 三次握手过程:
      1. 客户端发送 SYN
      2. 服务器返回 SYN-ACK
      3. 客户端返回 ACK
  2. TLS 握手(如果是 HTTPS)
    • 建立加密通道:
      1. 协商加密算法
      2. 交换证书并验证
      3. 生成会话密钥

4️⃣ 浏览器发送 HTTP 请求

  1. 请求行
    • GET / HTTP/1.1
  2. 请求头
    • Host: www.xx.com
    • User-Agent: 浏览器信息
    • Cookie: 用户相关信息
  3. 请求体(POST 请求才有)

5️⃣ 服务器处理请求

  1. 接收 TCP 请求
  2. Web 服务器解析请求
    • Nginx/Apache/Spring Boot 等服务器读取请求路径
  3. 路由到应用逻辑
    • 应用生成 HTML、JSON 或重定向等响应
  4. 服务器返回 HTTP 响应
    • 状态码:200/301/404/500
    • 响应头:Content-Type, Set-Cookie 等
    • 响应体:HTML、图片、JS、CSS 等

6️⃣ 浏览器接收响应并渲染页面

  1. 接收数据
    • 浏览器读取 HTML 文本
  2. 解析 HTML
    • 构建 DOM 树
  3. 解析 CSS
    • 构建 CSSOM 树
  4. 合并 DOM + CSSOM → Render Tree
  5. 布局(Layout)
    • 计算每个元素位置和大小
  6. 绘制(Painting)
    • 把页面绘制到屏幕上
  7. 执行 JS
    • 修改 DOM/CSSOM、发起 AJAX 请求、监听事件
  8. 资源加载
    • 图片、字体、视频、JS 脚本异步加载

7️⃣ 后续行为

  • 缓存资源:浏览器会缓存部分静态文件
  • 发送分析/追踪请求:如 GA、埋点等
  • 长连接保持:HTTP/2 或 HTTP/3 可能复用 TCP 连接,方便后续请求

💡 总结一句话
从你敲下 www.xx.com 到页面显示,实际上是 浏览器发起 DNS 查询 → TCP/TLS 建立连接 → HTTP 请求 → 服务器响应 → 浏览器渲染页面 的完整流程,涉及网络协议、缓存机制、加密握手、DOM/CSS 渲染等多个复杂环节。