Skip to content

HTTP 协议演变 ​

一、HTTP 版本对比 ​

版本连接并发队头阻塞协议层
HTTP/1.0短连接多 TCP严重TCP
HTTP/1.1长连接有限应用层TCP
HTTP/2多路复用高TCP 层TCP
HTTP/3QUIC极高无UDP

二、HTTP/1.0 ​

  • 短连接: 每次请求建立新 TCP 连接
  • 无 Host 头: 无法虚拟主机
  • 无状态: 无 Cookie 支持

三、HTTP/1.1 ​

改进 ​

Keep-Alive: 复用 TCP 连接
Pipelining: 并行发送请求 (实践中很少使用)
Host 头: 支持虚拟主机
分块传输: Transfer-Encoding: chunked
缓存控制: Cache-Control, ETag

队头阻塞 ​

请求1 ─────────────────────▶ 响应1 (慢)
请求2 ─►                     ▶ 响应2 (等待响应1)
请求3 ─►                        ▶ 响应3 (等待响应2)

四、HTTP/2 ​

核心特性 ​

javascript
// 二进制帧
// 原来的文本协议 -> 二进制帧
// Frame: Length (3) + Type (1) + Flags (1) + Stream ID (4) + Payload

// 多路复用
// 一个 TCP 连接上并发多个 Stream
// 每个 Stream 由多个 Frame 组成
// Stream 之间独立,无队头阻塞

// HPACK 头部压缩
// 静态表: 61 个预定义 header
// 动态表: 连接期间建立
// Huffman 编码

服务器推送 ​

javascript
// 服务器主动推送资源
// 客户端请求 index.html
// 服务器响应 index.html + 推送 style.css + app.js

// Nginx 配置
// location / {
//   http2_push /style.css;
//   http2_push /app.js;
// }

五、HTTP/3 (QUIC) ​

解决 TCP 队头阻塞 ​

HTTP/2 over TCP:
Stream1 ──────X──────────────▶ (丢包导致所有 Stream 阻塞)
Stream2 ──────────────────────▶
Stream3 ──────────────────────▶

HTTP/3 over QUIC:
Stream1 ──────X──────────────▶ (只影响 Stream1)
Stream2 ──────────────────────▶ (正常)
Stream3 ──────────────────────▶ (正常)

核心特性 ​

  • 0-RTT/1-RTT 握手: 首次 1-RTT,恢复连接 0-RTT
  • 连接迁移: 基于 Connection ID,切换网络无需重连
  • 改进的拥塞控制: 更精确的 RTT 测量

六、常见状态码 ​

状态码含义场景
200OK请求成功
201Created创建成功
204No Content成功但无返回
301Moved Permanently永久重定向
302Found临时重定向
304Not Modified缓存有效
400Bad Request请求格式错误
401Unauthorized未认证
403Forbidden无权限
404Not Found资源不存在
500Internal Server Error服务器错误
502Bad Gateway网关错误
503Service Unavailable服务不可用
504Gateway Timeout网关超时

七、常见请求头 ​

头部用途示例
Content-Type内容类型application/json
Accept接受类型text/html,application/json
Authorization认证Bearer xxx
Cache-Control缓存控制max-age=3600, no-cache
Cookie会话session_id=abc
User-Agent客户端信息Mozilla/5.0...
Origin来源https://example.com
Referer来源页面https://example.com/page

八、常见响应头 ​

头部用途示例
Content-Type内容类型application/json; charset=utf-8
Content-Length内容长度1234
Set-Cookie设置 Cookiesession=abc; HttpOnly
Cache-Control缓存max-age=31536000
ETag资源版本"abc123"
Access-Control-*CORSAllow-Origin: *
Content-Encoding压缩gzip, br

面试高频题 ​

Q1: HTTP/1.1 的队头阻塞如何解决? ​

  1. 域名分片 (多个 TCP 连接)
  2. 资源合并 (减少请求数)
  3. 升级 HTTP/2

Q2: HTTP/2 为什么还有队头阻塞? ​

TCP 层丢包会阻塞所有 Stream。HTTP/3 使用 UDP 的 QUIC 解决。

Q3: HTTPS 的握手过程? ​

  1. 客户端发送 Client Hello (支持的加密套件)
  2. 服务器返回 Server Hello + 证书
  3. 客户端验证证书,生成预主密钥
  4. 使用预主密钥生成会话密钥
  5. 加密通信

前端面试知识库