HTTP 协议的常用方法有哪些?(GET、POST、PUT、DELETE、PATCH)各自的作用和区别是什么?
HTTP 协议定义了多种请求方法,用于指定客户端对服务器资源的操作。其中最常用的是 GET、POST、PUT、DELETE、PATCH,它们的作用和区别如下:
1. GET
- 作用:从服务器获取资源(只读操作),是最常用的方法。
- 特点:
- 请求参数通常附加在 URL 后面(如
?id=1&name=test),长度受浏览器/服务器限制(一般不超过 2048 字符)。 - 无请求体(body),或不建议在 body 中携带数据(部分客户端支持,但不符合规范)。
- 是安全的(不修改资源状态)和幂等的(多次执行结果相同)。
- 可被缓存(如浏览器缓存、CDN 缓存),会被浏览器历史记录保存。
- 请求参数通常附加在 URL 后面(如
- 典型场景:查询数据(如获取用户信息、搜索结果)。
- 示例:
GET /users/1(获取 ID 为 1 的用户)。
2. POST
- 作用:向服务器提交数据,通常用于创建新资源或触发非幂等操作。
- 特点:
- 请求参数放在请求体(body)中,可传输大量数据(无明确长度限制),支持多种格式(如 JSON、FormData)。
- 是非安全的(可能修改资源状态)和非幂等的(多次执行可能产生不同结果,如重复提交订单会创建多个订单)。
- 默认不可缓存,不会被浏览器历史记录保存。
- 典型场景:创建资源(如注册用户、提交表单、上传文件)、执行复杂操作(如支付)。
- 示例:
POST /users(请求体携带新用户信息,创建用户)。
3. PUT
- 作用:向服务器全量更新资源(若资源不存在,可能创建新资源,取决于服务器实现)。
- 特点:
- 请求参数放在请求体中,需包含资源的完整数据(即使某些字段未修改)。
- 是非安全的(会修改资源),但幂等的(多次执行结果相同,最终资源状态由请求体决定)。
- 不可缓存。
- 典型场景:全量更新资源(如修改用户的所有信息,包括姓名、年龄、邮箱等)。
- 示例:
PUT /users/1(请求体携带用户 ID=1 的完整信息,覆盖原有数据)。
4. DELETE
- 作用:删除服务器上的资源。
- 特点:
- 通常通过 URL 标识要删除的资源,请求体可选(一般不携带数据)。
- 是非安全的(会删除资源),但幂等的(多次删除同一资源,最终结果相同:资源不存在)。
- 不可缓存。
- 典型场景:删除资源(如删除用户、订单)。
- 示例:
DELETE /users/1(删除 ID 为 1 的用户)。
5. PATCH
- 作用:向服务器部分更新资源(仅修改资源的部分字段)。
- 特点:
- 请求体仅包含需要修改的字段(无需完整资源数据),比
PUT更高效。 - 是非安全的(会修改资源),但幂等的(多次执行相同的部分更新,结果相同)。
- 不可缓存。
- 请求体仅包含需要修改的字段(无需完整资源数据),比
- 典型场景:部分更新资源(如仅修改用户的邮箱,不改变姓名和年龄)。
- 示例:
PATCH /users/1(请求体为{"email": "new@example.com"},仅更新邮箱)。
核心区别总结
| 方法 | 核心作用 | 数据位置 | 安全性(是否修改资源) | 幂等性(多次执行结果是否相同) | 缓存性 | 典型场景 |
|---|---|---|---|---|---|---|
| GET | 获取资源 | URL 参数 | 安全(不修改) | 幂等 | 可缓存 | 查询数据 |
| POST | 创建资源/提交数据 | 请求体 | 非安全(可能修改) | 非幂等 | 不可缓存 | 注册、提交表单、支付 |
| PUT | 全量更新资源 | 请求体 | 非安全(修改) | 幂等 | 不可缓存 | 全量修改用户信息 |
| DELETE | 删除资源 | URL 标识 | 非安全(删除) | 幂等 | 不可缓存 | 删除用户、订单 |
| PATCH | 部分更新资源 | 请求体(部分字段) | 非安全(修改) | 幂等 | 不可缓存 | 仅修改用户邮箱、手机号 |
补充说明
- 安全性:指是否改变服务器资源的状态(
GET是唯一安全的方法)。 - 幂等性:指多次执行相同请求后,服务器资源状态是否一致(
GET/PUT/DELETE/PATCH是幂等的,POST通常非幂等)。 - 实际开发中,部分场景可能灵活使用(如
POST也可用于更新资源),但遵循规范能提高接口的可读性和一致性。
