HTTP 定义了多种请求方法(HTTP Methods),用于表示客户端对服务器资源的不同操作。以下是常见的 HTTP 请求方法及其用途和特点:
1. 核心方法(常用)
| 方法 | 作用 | 幂等性 | 安全性 | 请求体支持 |
|---|---|---|---|---|
| GET | 获取资源(查询数据),参数通过URL传递(params)。 | 幂等 | 安全 | ❌ 不支持 |
| POST | 提交数据(创建/更新资源),参数通过请求体传递(data)。 | 不幂等 | 不安全 | ✅ 支持 |
| PUT | 替换整个资源(全量更新),需提交完整的资源数据。 | 幂等 | 不安全 | ✅ 支持 |
| PATCH | 部分更新资源(增量更新),只需提交需修改的字段。 | 不幂等 | 不安全 | ✅ 支持 |
| DELETE | 删除资源。 | 幂等 | 不安全 | ❌ 可选 |
2. 其他方法(辅助或特殊用途)
| 方法 | 作用 |
|---|---|
| HEAD | 类似GET,但只返回响应头(不返回响应体),用于检查资源是否存在或获取元数据。 |
| OPTIONS | 获取服务器支持的HTTP方法或跨域请求(CORS)的预检请求(Preflight)。 |
| TRACE | 回显客户端的请求(用于诊断),实际开发中极少使用。 |
| CONNECT | 建立与服务器的隧道(用于代理服务器和HTTPS连接)。 |
关键概念解释
-
幂等性(Idempotent)
多次执行同一请求的效果与一次执行相同(如:GET、PUT、DELETE是幂等的,POST、PATCH不是)。 -
安全性(Safe)
方法不会修改服务器资源(如:GET、HEAD是安全的,POST、PUT、DELETE不是)。 -
请求体支持
GET和HEAD通常不携带请求体,但某些实现可能允许(非标准行为)。
使用场景示例
-
GET
// 获取用户列表 axios.get('/users', { params: { page: 1 } }); -
POST
// 创建新用户 axios.post('/users', { name: 'John', age: 25 }); -
PUT
// 全量更新用户ID为1的数据(需提交所有字段) axios.put('/users/1', { name: 'John', age: 26 }); -
PATCH
// 仅更新用户ID为1的年龄 axios.patch('/users/1', { age: 26 }); -
DELETE
// 删除用户ID为1的数据 axios.delete('/users/1');
RESTful API 设计原则
在 REST 架构中,HTTP 方法通常与资源操作对应:
GET→ 查询POST→ 创建PUT→ 全量更新PATCH→ 部分更新DELETE→ 删除
注意事项
-
幂等性与重试
幂等方法(如PUT、DELETE)在网络超时时可安全重试;非幂等方法(如POST)需谨慎处理。 -
兼容性
部分旧系统可能仅支持GET和POST,需通过参数(如_method)模拟其他方法。 -
浏览器限制
HTML 表单仅原生支持GET和POST,其他方法需通过 JavaScript(如AJAX)实现。