01 — HTTP与网络基础

核心规律:HTTP是无状态的,所有会话管理都是额外叠加的 一句话:理解请求-响应循环,就理解了Web的本质


一、核心规律

1.1 请求-响应模型

flowchart LR
    subgraph 浏览器["🖥️ 浏览器"]
        B["发起请求"]
    end
    subgraph 服务器["🖧 服务器"]
        S["处理请求"]
    end
    subgraph 数据库["💾 数据库"]
        D["查询数据"]
    end
    
    B -->|"HTTP Request"| S
    S -->|"SQL Query"| D
    D -->|"结果"| S
    S -->|"HTTP Response"| B
    
    style B fill:#e3f2fd
    style S fill:#fff3e0
    style D fill:#e8f5e9

核心规律:

  • HTTP是无状态的——每次请求独立,服务器不记得上次
  • 所有”状态”都是应用层额外实现的(Session/Cookie/Token)
  • 请求-响应是同步的——发完等结果,不处理其他事

1.2 关键思维模型

HTTP = 无状态协议 + 分层架构 + 缓存机制

无状态 → 需要Session/Token维持状态
分层架构 → 每层只关心自己的职责
缓存机制 → 减少重复请求,提升性能

二、HTTP核心概念

2.1 请求方法

方法幂等安全用途
GET查询资源
POST创建资源
PUT全量更新
PATCH部分更新
DELETE删除资源

记忆口诀: GET只读,POST创建,PUT全替,PATCH部分改,DELETE删掉

2.2 状态码分类

1xx — 信息性(处理中)
2xx — 成功(✅)
3xx — 重定向(→)
4xx — 客户端错误(❌ 你的问题)
5xx — 服务端错误(❌ 服务器问题)
状态码含义常见原因
200OK成功
201Created创建成功
301Moved永久重定向
302Found临时重定向
400Bad Request参数错误
401Unauthorized未登录
403Forbidden无权限
404Not Found资源不存在
422Unprocessable验证失败
500Internal Error服务器异常

2.3 关键请求头

Header作用示例
Content-Type请求体类型application/json
Authorization认证信息Bearer {token}
Cookie携带Cookiesession_id=abc123
Accept期望的响应类型application/json
Cache-Control缓存策略no-cache, max-age=3600
X-Forwarded-For真实IP(经代理)1.2.3.4, 5.6.7.8

三、TCP/IP基础

3.1 三次握手

sequenceDiagram
    participant C as 客户端
    participant S as 服务端
    
    C->>S: SYN(我要连接)
    S->>C: SYN+ACK(收到,我也要连接)
    C->>S: ACK(确认,连接建立)
    
    Note over C,S: 连接建立,可以传输数据
    
    C->>S: FIN(我要断开)
    S->>C: ACK(收到)
    S->>C: FIN(我也要断开)
    C->>S: ACK(确认)
    
    Note over C,S: 四次挥手,连接关闭

为什么是三次? 因为TCP是全双工的,双方都需要确认。

3.2 HTTPS原理

flowchart LR
    A["客户端"] -->|"1. ClientHello<br/>支持的加密套件"| B["服务器"]
    B -->|"2. ServerHello<br/>选择套件+证书"| A
    A -->|"3. 验证证书"| B
    B -->|"4. 公钥加密预主密钥"| A
    A -->|"5. 私钥解密"| B
    A & B -->|"6. 协商出会话密钥"| C["🔒 加密通道"]
    
    style C fill:#e8f5e9

核心规律: HTTPS = HTTP + SSL/TLS加密层,保证数据传输安全


四、网络分层

flowchart TB
    subgraph 应用层["📄 应用层 Application"]
        A1["HTTP / HTTPS"]
        A2["FTP"]
        A3["SMTP"]
        A4["WebSocket"]
    end
    
    subgraph 传输层["📦 传输层 Transport"]
        T1["TCP — 可靠连接"]
        T2["UDP — 快速但不可靠"]
    end
    
    subgraph 网络层["🌐 网络层 Network"]
        N1["IP — 寻址"]
        N2["ICMP — 诊断"]
    end
    
    subgraph 网络接口层["🔌 网络接口层"]
        I1["Ethernet"]
        I2["WiFi"]
    end
    
    A1 & A2 & A3 & A4 --> T1 & T2
    T1 & T2 --> N1 & N2
    N1 & N2 --> I1 & I2
层级职责关键协议
应用层应用程序间通信HTTP, FTP, SMTP, WebSocket
传输层端到端数据传输TCP(可靠), UDP(快速)
网络层数据包路由寻址IP, ICMP
网络接口层物理传输Ethernet, WiFi

五、实战要点

5.1 常见HTTP问题排查

请求发出去了,但没收到响应?
├── 1. 检查网络连接(ping/curl)
├── 2. 检查DNS解析(nslookup)
├── 3. 检查防火墙/安全组
├── 4. 检查服务端日志
└── 5. 检查超时配置

响应慢怎么办?
├── 1. EXPLAIN分析SQL
├── 2. 检查是否有N+1查询
├── 3. 检查缓存命中率
├── 4. 检查外部API调用
└── 5. 检查服务器负载

5.2 HTTP缓存策略

策略指令说明
不缓存Cache-Control: no-cache每次向服务器验证
强缓存Cache-Control: max-age=3600有效期内直接用
过期验证Cache-Control: max-age=3600, must-revalidate过期后向服务器确认
禁用缓存Cache-Control: no-store完全不存储

六、本章总结

核心规律:HTTP是无状态协议,所有”状态”都是应用层额外实现的。理解这一点,就理解了Session/Cookie/Token的设计初衷。

关键记忆点

  • ✅ HTTP无状态 → 需要Session/Token维持状态
  • ✅ TCP三次握手 → SYN→SYN+ACK→ACK
  • ✅ HTTPS = HTTP + SSL/TLS
  • ✅ 状态码2xx成功,3xx重定向,4xx客户端错,5xx服务端错

延伸阅读