【前端】输入网址到页面展示的全过程

35 阅读2分钟

1. 输入网址与 DNS 解析

  • 用户在浏览器输入网址,如 www.baidu.com。
  • 浏览器检查本地缓存(浏览器缓存、系统缓存、路由器缓存等)是否有这个域名对应的 IP 地址。
  • 若没有,则发起 DNS 请求,找到域名对应的 IP(如 14.215.177.39)——这是百度的服务器地址。

2. 建立 TCP 连接(三次握手)

  • 浏览器使用这个 IP 地址向服务器发起 TCP 连接。
  • 这是通过三次握手完成的,用于建立可靠连接:
客户端 --> SYN --> 服务器
服务器 --> SYN+ACK --> 客户端
客户端 --> ACK --> 服务器

3. 发起 HTTP 请求

TCP 连接建立后,浏览器向服务器发送一个 HTTP 请求报文,比如:

GET / HTTP/1.1
Host: www.baidu.com
User-Agent: ...
Accept: ...

4. 服务器响应(HTML 源码)

  • 百度服务器收到请求后,返回一个 HTTP 响应报文,内容通常是 HTML 页面源码:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: xxxx

<!DOCTYPE html>
<html>
  <head>...</head>
  <body>...</body>
</html>
  • 这个源码并不一定包含“页面上所有可见的数据”。

5. 浏览器解析 HTML

浏览器开始 逐行解析 HTML 源码,过程中执行:

📌 构建 DOM 树(Document Object Model)
HTML 标签被解析为结构化节点树。

📌 构建 CSSOM 树(CSS Object Model)
CSS 样式被解析,生成样式树。

📌 合并成渲染树(Render Tree)
DOM + CSSOM → Render Tree,用于计算页面布局。

📌 执行 JavaScript

  • 若页面内含有 JS 脚本(例如 React/Vue 应用),会暂停解析 HTML,加载并执行脚本。
  • JS 代码可能会发起额外的网络请求(AJAX / Fetch)加载更多数据。

6. 页面渲染流程

浏览器完成以下渲染过程:

  1. **Layout(回流):**计算每个元素的几何信息(位置、大小)。
  2. **Painting(绘制):**将像素绘制到屏幕上。
  3. **Compositing(合成):**生成最终的页面视图。

7. 两种渲染方式的对比

渲染方式说明优点缺点
SSR(服务器渲染)数据直接写入 HTML 返回首屏快,利于 SEO每次请求都要生成完整页面,服务端压力大
CSR(客户端渲染)返回空壳 HTML + JS,JS 请求数据再渲染服务端压力小,交互灵活首屏慢,不利于 SEO