HTTP 协议
HTTP 是后端每天打交道的协议。面试主线:版本演进差异、请求响应结构、状态码语义。
版本演进
| 版本 | 核心变化 | 问题 |
|---|---|---|
| HTTP/1.0 | 基本请求响应 | 每请求一个连接 |
| HTTP/1.1 | keep-alive、管道、Host 头 | 队头阻塞(一个响应慢全堵) |
| HTTP/2 | 多路复用、二进制分帧、头部压缩、服务端推送 | 单连接队头阻塞(TCP 层) |
| HTTP/3 | QUIC(UDP 上实现可靠+加密) | 生态迁移中 |
队头阻塞是演进主线:
- 1.1:一个连接同一时刻一个请求(管道化也受响应顺序限制)
- 2.0:一个连接多路复用(解决了应用层),但 TCP 丢包重传仍阻塞整个连接
- 3.0:QUIC 在 UDP 上做多流独立,丢包只影响自己的流(见 UDP 与 QUIC 篇)
面试话术:HTTP/2 解决应用层队头阻塞,HTTP/3 解决传输层队头阻塞。
请求与响应
请求: 方法 路径 版本 GET /api/users HTTP/1.1
头 Host: example.com
Content-Type: application/json
空行
体 {"name": "alice"}
响应: 版本 状态码 原因 HTTP/1.1 200 OK
头
空行
体状态码速记
| 类别 | 含义 | 常考 |
|---|---|---|
| 2xx | 成功 | 200 OK、201 Created、204 No Content |
| 3xx | 重定向 | 301 永久、302 临时、304 Not Modified(缓存) |
| 4xx | 客户端错误 | 400 参数错、401 未认证、403 无权限、404 不存在、429 限流 |
| 5xx | 服务端错误 | 500 内部错误、502 网关错、503 服务不可用、504 网关超时 |
常考区分:401 vs 403(没登录 vs 没权限)、301 vs 302(永久 vs 临时,SEO 语义)、502 vs 504(上游拒绝 vs 上游超时)。
常用头
| 头 | 作用 |
|---|---|
| Content-Type / Content-Length | 体格式与长度 |
| Cache-Control | 缓存策略(max-age、no-cache) |
| Connection: keep-alive / close | 连接复用 |
| Cookie / Set-Cookie | 会话状态 |
| Authorization | 认证凭据(Bearer token) |
| CORS 系列 | 跨域(见 FastAPI 篇) |
面试追问
- HTTP/2 解决了什么? 多路复用(一个连接并发请求)、二进制分帧、头部压缩。但 TCP 层队头阻塞还在
- 队头阻塞是什么? 一个包阻塞整条链路:1.1 是响应顺序,2.0 是 TCP 丢包重传。3.0 用 QUIC 多流解决
- 401 和 403? 401 未认证(去登录),403 已认证但没权限
- 304 是什么? 协商缓存:资源没变,服务器返回 304 不带体,客户端用本地缓存
- keep-alive 的意义? 复用 TCP 连接省握手开销。1.1 默认开启,高并发服务的基础