HTTP 协议中定义了多种 请求方法(HTTP Methods),用于客户端和服务器之间进行不同的操作。

一、常用的 HTTP 方法

方法是否幂等是否安全说明
GET✅ 幂等✅ 安全获取资源。请求参数放在 URL 上。不会对资源产生副作用。
POST❌ 非幂等❌ 不安全提交数据(如表单、上传),可能导致资源变化或创建。
PUT✅ 幂等❌ 不安全用于整体更新某个资源(数据完全替换)。
PATCH❌ 非幂等❌ 不安全用于部分更新资源(只改动部分字段)。
DELETE✅ 幂等❌ 不安全删除指定资源。

二、幂等性和安全性解释

  • 幂等(Idempotent):同一个请求重复执行多次,结果应一样。例如多次 DELETE 相同资源结果相同。
  • 安全(Safe):不对服务器资源造成副作用。GET 只查询,不修改数据,因此是安全的。

三、其他常见 HTTP 方法

方法说明
HEAD类似 GET,但不返回响应体,只返回响应头。常用于检测资源是否存在、获取响应信息。
OPTIONS用于客户端获取服务器支持哪些方法。也是 CORS 预检请求的一部分。
TRACE回显服务器收到的请求,主要用于调试。很少使用,可能存在安全隐患。
CONNECT用于建立隧道(如 HTTPS 的代理通信)。

四、使用场景示例

场景方法示例
获取用户列表GETGET /api/users
创建用户POSTPOST /api/users
更新用户信息PUT / PATCHPUT /api/users/1PATCH /api/users/1
删除用户DELETEDELETE /api/users/1

总结:记住这几点

  1. GET 用于查询(安全、幂等)。
  2. POST 用于新增(不幂等)。
  3. PUT/PATCH 用于修改资源(PUT 是整体替换,PATCH 是部分更新)。
  4. DELETE 用于删除资源(幂等,但不安全)。
  5. 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 防护?