一次完整HTTP事务的全过程分析

七步完成HTTP事务
text

  1. 域名解析 → 2. TCP三次握手 → 3. 发送HTTP请求
  2. 服务器处理 → 5. 接收HTTP响应 → 6. 浏览器渲染
  3. TCP四次挥手
    详细步骤分解
    第一步:域名解析(DNS Lookup)
    text
    浏览器缓存 → 系统缓存 → 路由器缓存 → ISP DNS缓存
    ↓ ↓ ↓ ↓
    本地查找 → 系统hosts文件 → 路由器记录 → 运营商DNS
    ↓ ↓ ↓ ↓
    递归查询 → 根域名服务器 → 顶级域名服务器 → 权威域名服务器
    优化策略:

DNS预解析:

减少域名数量:合并资源到同一域名

使用HTTP/2:单域名多路复用

第二步:TCP三次握手建立连接
python

伪代码表示TCP握手

def tcp_three_way_handshake():
# 第一次握手:客户端发送SYN
client.send(SYN=1, seq=1000)

# 第二次握手:服务器响应SYN+ACK
server.send(SYN=1, ACK=1, seq=2000, ack=1001)

# 第三次握手:客户端发送ACK
client.send(ACK=1, seq=1001, ack=2001)

return "连接建立成功"

第三步:构建并发送HTTP请求
请求报文结构:

text
GET /index.html HTTP/1.1 ← 请求行
Host: www.example.com ← 请求头开始
User-Agent: Chrome/91.0
Accept: text/html
Accept-Language: zh-CN
Connection: keep-alive
← 空行(CRLF)
[请求体] ← GET请求通常无请求体
第四步:服务器处理请求
服务器处理流程:

text
接收请求 → 解析请求 → 路由匹配 → 执行业务逻辑
↓ ↓ ↓ ↓
Nginx/Apache → 解析头部 → MVC框架 → 数据库操作
↓ ↓ ↓ ↓
生成响应 → 设置头部 → 返回状态码 → 输出响应体
第五步:浏览器接收并解析响应
关键响应头部示例:

http
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Cache-Control: max-age=3600
ETag: "abc123"
Date: Wed, 21 Oct 2022 07:28:00 GMT
Server: nginx/1.18.0
第六步:浏览器渲染页面
javascript
// 浏览器渲染关键步骤

  1. 解析HTML构建DOM树
  2. 解析CSS构建CSSOM树
  3. 合并DOM和CSSOM生成渲染树
  4. 计算布局(重排)
  5. 绘制像素(重绘)
  6. 合成图层显示
    第七步:连接关闭
    HTTP/1.0:每次请求后关闭连接

HTTP/1.1:默认保持连接(Connection: keep-alive)

长连接管理:超时或达到最大请求数后关闭

posted on 2025-12-25 20:03  拾壹凪  阅读(5)  评论(0)    收藏  举报

导航