HTTP 协议中定义了多种 请求方法(HTTP Methods),用于客户端和服务器之间进行不同的操作。
一、常用的 HTTP 方法#
| 方法 | 是否幂等 | 是否安全 | 说明 |
|---|
| GET | ✅ 幂等 | ✅ 安全 | 获取资源。请求参数放在 URL 上。不会对资源产生副作用。 |
| POST | ❌ 非幂等 | ❌ 不安全 | 提交数据(如表单、上传),可能导致资源变化或创建。 |
| PUT | ✅ 幂等 | ❌ 不安全 | 用于整体更新某个资源(数据完全替换)。 |
| PATCH | ❌ 非幂等 | ❌ 不安全 | 用于部分更新资源(只改动部分字段)。 |
| DELETE | ✅ 幂等 | ❌ 不安全 | 删除指定资源。 |
二、幂等性和安全性解释#
- 幂等(Idempotent):同一个请求重复执行多次,结果应一样。例如多次 DELETE 相同资源结果相同。
- 安全(Safe):不对服务器资源造成副作用。GET 只查询,不修改数据,因此是安全的。
三、其他常见 HTTP 方法#
| 方法 | 说明 |
|---|
| HEAD | 类似 GET,但不返回响应体,只返回响应头。常用于检测资源是否存在、获取响应信息。 |
| OPTIONS | 用于客户端获取服务器支持哪些方法。也是 CORS 预检请求的一部分。 |
| TRACE | 回显服务器收到的请求,主要用于调试。很少使用,可能存在安全隐患。 |
| CONNECT | 用于建立隧道(如 HTTPS 的代理通信)。 |
四、使用场景示例#
| 场景 | 方法 | 示例 |
|---|
| 获取用户列表 | GET | GET /api/users |
| 创建用户 | POST | POST /api/users |
| 更新用户信息 | PUT / PATCH | PUT /api/users/1 或 PATCH /api/users/1 |
| 删除用户 | DELETE | DELETE /api/users/1 |
总结:记住这几点#
- GET 用于查询(安全、幂等)。
- POST 用于新增(不幂等)。
- PUT/PATCH 用于修改资源(PUT 是整体替换,PATCH 是部分更新)。
- DELETE 用于删除资源(幂等,但不安全)。
- OPTIONS/HEAD 用于辅助请求。
常见考点#
1. 语义理解#
- 每个方法在 RESTful API 中代表的含义?
- PUT 和 PATCH 的区别?
- GET 和 POST 区别?是否可以用 POST 替代 GET?
2. 幂等性与安全性#
- 哪些方法是幂等的?(调用多次结果一致)
- 哪些方法是安全的?(不会对服务器资源产生副作用)
3. 浏览器行为#
- 表单默认提交方式是什么?(GET 或 POST)
- GET 请求能携带 body 吗?(规范上不能,但部分浏览器允许)
4. 缓存行为#
- 浏览器对 GET、POST 的缓存行为有什么区别?
- 为什么 GET 更适合缓存?
5. 跨域相关(CORS)#
- 哪些方法属于“简单请求”?
- 使用 PUT/PATCH/DELETE 会触发预检请求(OPTIONS),为什么?
6. 请求体与响应体#
- 哪些方法通常不携带请求体?(如 GET、DELETE)
- 哪些方法可以/需要携带请求体?(如 POST、PUT、PATCH)
7. 对比和实际使用中的陷阱#
- PUT/POST 混用的场景(如某些系统用 POST 实现更新)
- DELETE 是否要有请求体?(规范允许,但不推荐)
可能的延伸考察#
RESTful API 设计规范#
- REST API 中,如何正确使用 GET/POST/PUT/DELETE 等方法?
- 设计一个增删改查接口,如何对应到不同 HTTP 方法?
状态码与方法配合#
- DELETE 成功一般返回什么状态码?(如 204 No Content)
- POST 创建资源后返回什么?(201 Created)
结合安全问题#
- POST/PUT 方法可能面临哪些安全风险?如 CSRF?
- 为什么建议对非幂等方法加 CSRF 防护?