HTTP
📌 一、HTTP请求方法
1. 常见方法及用途
| 方法 | 安全? | 幂等? | 描述 |
|---|---|---|---|
GET | ✅ | ✅ | 获取资源 |
POST | ❌ | ❌ | 提交数据(创建资源) |
PUT | ❌ | ✅ | 更新完整资源 |
PATCH | ❌ | ❌ | 更新资源部分内容 |
DELETE | ❌ | ✅ | 删除资源 |
HEAD | ✅ | ✅ | 获取响应头(无Body) |
OPTIONS | ✅ | ✅ | 查询服务器支持的方法 |
安全:不修改服务器资源
幂等:多次执行效果相同
🔥 二、POST vs PUT 核心区别
| 特性 | POST | PUT |
|---|---|---|
| URI含义 | 作用于父资源集合 (如 /users) | 作用于具体资源 (如 /users/123) |
| 语义 | 创建新资源 (服务器分配ID) | 替换现有资源 (客户端指定ID) |
| 幂等性 | ❌ 多次提交可能创建多个资源 | ✅ 多次调用结果一致 |
| 响应码 | 201 Created | 200 OK 或 204 No Content |
| 缓存 | 通常不可缓存 | 通常不可缓存 |
✅ 关键总结:
- POST → 创建(不指定资源ID)
- PUT → 全量更新/创建(需明确资源ID)
🌐 三、HTTP状态码分类
| 分类 | 范围 | 代表状态码 |
|---|---|---|
| 1xx | 信息类 | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重定向 | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | 客户端错误 | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | 服务器错误 | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
⚡ 四、HTTP版本演进
1. HTTP/1.0 vs HTTP/1.1
| 特性 | HTTP/1.0 | HTTP/1.1 |
|---|---|---|
| 连接管理 | 短连接(每次请求新TCP) | 长连接(默认Connection: keep-alive) |
| 缓存控制 | 基础(Expires) | 增强(Cache-Control) |
| 主机头 | 无 | Host头(支持虚拟主机) |
| 方法扩展 | 基础方法 | 新增OPTIONS, PUT等 |
2. HTTP/2 核心特性
- 二进制分帧(替代文本传输)
- 多路复用(一个连接并行处理请求)
- 头部压缩(HPACK算法)
- 服务器推送(主动推送资源)
🧠 五、高频面试题
1. 什么是幂等性?哪些HTTP方法是幂等的?
幂等:多次执行结果一致。
幂等方法:GET,PUT,DELETE,HEAD,OPTIONS
2. HTTP缓存如何工作?
- 强缓存:直接使用本地副本
(Cache-Control: max-age=3600,Expires) - 协商缓存:询问服务器资源是否变更
(Last-Modified+If-Modified-Since/ETag+If-None-Match)
3. Cookie vs Session
| Cookie | Session | |
|---|---|---|
| 存储位置 | 客户端 | 服务器 |
| 安全性 | 较低(可篡改) | 较高 |
| 存储限制 | ≤4KB | 无硬限制 |
| 实现机制 | Set-Cookie响应头 | Session ID(常存于Cookie) |
4. HTTPS如何保证安全?
- TLS/SSL加密
- 混合加密:
- 非对称加密交换对称密钥
- 对称加密传输数据
- 数字证书验证身份(防中间人攻击)
💡 六、易混淆概念
301 vs 302 重定向
- 301 Moved Permanently:永久重定向(搜索引擎更新URL)
- 302 Found:临时重定向(后续请求仍用原URL)
RESTful中PUT vs PATCH
PUT→ 替换整个资源PATCH→ 部分修改(如只更新用户邮箱)
