说一下用户输入 URL 后会发生什么 ?

54 阅读3分钟

从输入网址到页面显示,整个过程可以分为以下几个核心阶段:


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 三次握手 建立可靠的传输连接:

    1. 客户端向服务器发送 SYN 包,请求建立连接。
    2. 服务器回复 SYN+ACK 包,确认请求并同步序列号。
    3. 客户端发送 ACK 包,确认连接建立。
  • 如果是 HTTPS 协议,还会在 TCP 连接建立后进行 TLS/SSL 握手,协商加密算法、交换密钥,确保后续通信加密。


4. 发送 HTTP 请求

  • 浏览器向服务器发送 HTTP 请求报文,包含请求行(如 GET /index.html HTTP/1.1)、请求头(如 HostUser-AgentCookie)、请求体(POST 请求时携带)。
  • 服务器收到请求后,会根据请求路径和参数处理业务逻辑,生成响应数据。

5. 服务器处理请求并返回响应

  • 服务器解析请求,查询数据库、生成动态页面或读取静态文件,然后返回 HTTP 响应报文
  • 响应包含状态码(如 200 OK404 Not Found)、响应头(如 Content-TypeCache-Control)、响应体(HTML/CSS/JS 等资源)。

6. 浏览器渲染页面

  • 浏览器收到响应后,开始解析和渲染页面,主要步骤:

    1. 解析 HTML → 生成 DOM 树。
    2. 解析 CSS → 生成 CSSOM 树。
    3. 合成渲染树 → 将 DOM 树与 CSSOM 树结合,生成渲染树。
    4. 布局(Layout) → 计算每个元素的位置和大小。
    5. 绘制(Paint) → 将元素绘制到屏幕上。
    6. 合成(Composite) → 将图层合并,最终显示在浏览器窗口。

7. 断开 TCP 连接(四次挥手)

  • 页面加载完成后,浏览器与服务器通过 TCP 四次挥手 断开连接:

    1. 客户端发送 FIN 包,请求关闭连接。
    2. 服务器回复 ACK 包,确认关闭请求。
    3. 服务器发送 FIN 包,准备关闭连接。
    4. 客户端回复 ACK 包,确认连接关闭。

关键补充

  • 缓存优化:浏览器会优先使用本地缓存的资源(如 CSS/JS/ 图片),减少网络请求,提升加载速度。
  • CDN 加速:如果资源部署在 CDN,DNS 会解析到离用户最近的 CDN 节点,进一步缩短响应时间。
  • 重定向处理:如果服务器返回 3xx 状态码,浏览器会根据响应头的 Location 字段重新发起请求。