从浏览器访问地址到看到页面信息经历的过程

以搜索"人工智能"为例,从输入URL到页面显示,百度背后经历了7 大核心步骤:

plaintext 复制代码
URL解析 → DNS域名解析 → TCP连接(HTTPS握手) → HTTP请求发送 → 百度服务器处理 → 响应返回 → 浏览器渲染

URL解析(浏览器预处理)

当你在浏览器地址栏输入https://www.baidu.com/s?wd=人工智能 并回车,浏览器首先解析 URL:

解析部分 内容 用途
协议 Https 使用 443 端口,启用加密通信
域名 www.baidu.com 目标服务器地址
路径 /s 百度搜索服务入口
查询参数 wd = 人工智能 搜索关键词(已URL编码)

若直接输入 "人工智能"(不带 URL),百度会自动补全为https://www.baidu.com/s?wd=人工智能

DNS 域名解析(将域名→IP)

  • 百度使用多级 DNS 解析 + 智能调度,确保全球用户快速获取IP:
    2.1 浏览器先检查本地缓存(最快)
    浏览器缓存:查看是否已缓存www.baidu.com的IP
    系统hosts文件:检查C:\Windows\System32\drivers\etc\hosts(Windows)
    2.2 若缓存未命中,进行DNS 递归查询(约 10-100ms)
plaintext 复制代码
本地DNS服务器 → 根服务器 → .com顶级域服务器 → 百度权威DNS服务器

百度特有优化:

  • 使用a.shifen.com作为通用域名,背后是IP 地址池,实现负载均衡
  • 百度DNS服务将解析延迟控制在10ms以内,比传统DNS快70%
  • 采用BGP Anycast技术,让用户就近接入最近的数据中心

建立网络连接(TCP+TLS 握手)

3.1 TCP 三次握手(建立可靠连接)

  • 浏览器:发送 SYN 包(seq=x),请求连接
  • 百度服务器:返回 SYN+ACK(ack=x+1, seq=y)
  • 浏览器:发送 ACK(ack=y+1),连接建立
    3.2 HTTPS 额外:TLS 握手(加密通信)
  • 浏览器:发送支持的TLS版本和加密套件
  • 百度:返回证书(含公钥)和选定的加密方案
  • 浏览器:验证证书(通过CA机构确认是真百度)
  • 双方生成会话密钥,后续数据均加密传输

发送 HTTP 请求(浏览器→百度)

连接建立后,浏览器发送完整的 HTTP 请求:

http 复制代码
GET /s?wd=%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD HTTP/1.1
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0
Accept: text/html,application/xhtml+xml
Accept-Encoding: gzip, deflate, br
Cookie: BIDUPSID=ABC123; PSTM=1698521234  # 百度会话Cookie

百度服务器处理(核心处理流程)

百度采用多级架构处理请求,确保高并发下的稳定响应:

  • 负载均衡层(DNS + 服务器负载)
  • 反向代理层(Nginx 等)
  • 搜索核心处理

返回 HTTP 响应(百度→浏览器)

处理完成后,百度返回响应:

http 复制代码
HTTP/1.1 200 OK
Server: BWS/1.1  # 百度Web服务器
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip  # 内容已压缩,节省带宽
Content-Length: 12345
Set-Cookie: BAIDUID=DEF456; Expires=Thu, 31 Dec 2037 23:59:59 GMT  # 设置新Cookie
Cache-Control: max-age=3600  # 浏览器可缓存1小时

<!DOCTYPE html>
<html>
<head>
<title>百度搜索_人工智能</title>
...
</head>
<body>
  <div id="content">
    <h3>相关搜索结果</h3>
    ...  # 搜索结果列表
  </div>
</body>
</html>

浏览器渲染页面(呈现最终结果)

  • 解析 HTML,构建 DOM 树
  • 解析 CSS,生成 CSSOM
  • 构建渲染树(Render Tree)
  • 布局计算(Layout)
  • 绘制(Painting)
  • 资源加载(图片、JS 等)
  • JavaScript 执行

连接关闭(TCP四次挥手)

页面完全加载后,若一段时间内无新请求,连接将通过四次挥手关闭:

  • 浏览器:发送 FIN 包(结束发送)
  • 百度:确认 ACK
  • 百度:发送 FIN 包(结束接收)
  • 浏览器:确认 ACK