HTTP 请求方法
基础概念
HTTP 请求的结构
请求方法 请求URI HTTP版本
请求头
空行
请求体
HTTP 方法分类
| 类别 | 方法 | 说明 |
|---|---|---|
| 安全方法 | GET, HEAD, OPTIONS | 不应修改资源 |
| 幂等方法 | GET, HEAD, PUT, DELETE, OPTIONS | 多次执行效果相同 |
| 可缓存方法 | GET, HEAD, POST | 响应可被缓存 |
核心方法详解
1. GET - 获取资源
GET /api/users/123 HTTP/1.1
Host: example.com
Accept: application/json
- 用途:获取资源,不应有副作用
- 幂等性:✅ 是
- 安全性:✅ 是
- 可缓存:✅ 是
- 请求体:通常为空
- 响应体:包含请求的资源
2. POST - 创建资源
POST /api/users HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 45
{"name": "John", "email": "john@example.com"}
- 用途:提交数据,通常创建新资源
- 幂等性:❌ 否(多次调用可能创建多个资源)
- 安全性:❌ 否
- 可缓存:仅在明确指定时
- 典型场景:
- 创建新资源
- 提交表单数据
- 上传文件
3. PUT - 替换资源
PUT /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 45
{"name": "John", "email": "john@example.com"}
- 用途:完全替换目标资源
- 幂等性:✅ 是
- 安全性:❌ 否
- 可缓存:❌ 否
- 特点:客户端提供完整的资源表示
4. PATCH - 部分更新
PATCH /api/users/123 HTTP/1.1
Host: example.com
Content-Type: application/json-patch+json
Content-Length: 36
[{"op": "replace", "path": "/name", "value": "Jane"}]
- 用途:对资源进行部分修改
- 幂等性:取决于实现
- 安全性:❌ 否
- 可缓存:❌ 否
- 内容格式:
- JSON Patch(RFC 6902)
- JSON Merge Patch(RFC 7396)
- 自定义格式
5. DELETE - 删除资源
DELETE /api/users/123 HTTP/1.1
Host: example.com
- 用途:删除指定资源
- 幂等性:✅ 是(删除一次与删除多次效果相同)
- 安全性:❌ 否
- 可缓存:❌ 否
6. HEAD - 获取头部信息
HEAD /api/users/123 HTTP/1.1
Host: example.com
- 用途:只获取响应头,不获取响应体
- 幂等性:✅ 是
- 安全性:✅ 是
- 可缓存:✅ 是
- 典型用途:
- 检查资源是否存在
- 获取资源的元数据(大小、类型等)
- 验证缓存是否有效
7. OPTIONS - 查询支持的方法
OPTIONS /api/users HTTP/1.1
Host: example.com
响应示例:
HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS
- 用途:查询服务器对某资源支持的方法
- 幂等性:✅ 是
- 安全性:✅ 是
- CORS预检请求:浏览器自动发送
8. TRACE - 回显请求
TRACE /api/users HTTP/1.1
Host: example.com
- 用途:诊断,服务器返回收到的原始请求
- 安全性:⚠️ 注意XST攻击(跨站追踪)
- 实际应用:调试代理链
9. CONNECT - 建立隧道
CONNECT proxy.example.com:443 HTTP/1.1
Host: proxy.example.com:443
- 用途:建立到目标服务器的隧道(主要用于HTTPS代理)
- 安全性:❌ 否
其他方法
10. LINK & UNLINK(已废弃)
LINK </images/logo.png>; rel=preload HTTP/1.1
UNLINK </images/logo.png> HTTP/1.1
- 建立/删除资源间关系(HTTP/1.1定义,但很少实现)
11. PURGE(缓存相关)
- 专用于缓存服务器(如Varnish、Squid)
- 清除缓存中的指定资源
12. LOCK & UNLOCK(WebDAV)
LOCK /documents/report.txt HTTP/1.1
UNLOCK /documents/report.txt HTTP/1.1
- WebDAV扩展,用于文件锁定机制
方法特性对比
| 方法 | 幂等 | 安全 | 可缓存 | 请求体 | 响应体 | 主要用途 |
|---|---|---|---|---|---|---|
| GET | ✅ | ✅ | ✅ | 不应有 | ✅ | 获取资源 |
| POST | ❌ | ❌ | 有时 | ✅ | ✅ | 创建资源 |
| PUT | ✅ | ❌ | ❌ | ✅ | ✅ | 替换资源 |
| PATCH | 可能 | ❌ | ❌ | ✅ | ✅ | 部分更新 |
| DELETE | ✅ | ❌ | ❌ | 可能有 | 可能有 | 删除资源 |
| HEAD | ✅ | ✅ | ✅ | 不应有 | ❌ | 获取头信息 |
| OPTIONS | ✅ | ✅ | ❌ | 不应有 | ✅ | 查询方法 |
| TRACE | ✅ | ⚠️ | ❌ | 不应有 | ✅ | 诊断 |
| CONNECT | ❌ | ❌ | ❌ | ✅ | ✅ | 建立隧道 |
本文来自博客园,作者:ffff5,转载请注明原文链接:https://www.cnblogs.com/ffff5/p/19439969

浙公网安备 33010602011771号