HTTP方法
两个关键原则
安全性:一个方法是“安全”的,意味着它只用于获取数据,而不会改变服务器的状态。安全的方法不应有副作用。
幂等性:一个方法是“幂等”的,意味着无论相同的请求被执行一次还是多次,其产生的结果都是完全相同的。客户端可以安全地重复发送请求。
GET:用于请求指定资源。GET请求应该只用于获取数据,而不应对数据产生任何副作用(幂等且安全)。
常用方法
POST:用于向指定资源提交数据,通常会导致服务器状态的变化(例如,创建新资源)。POST不是幂等的。
PUT:用于替换指定资源的所有当前表示。PUT是幂等的,因为多次执行相同的PUT操作会得到相同的结果。
DELETE:用于删除指定资源。DELETE是幂等的。
HEAD:与GET类似,但服务器只返回头部信息,不返回实体主体。用于获取资源的元信息。
OPTIONS:用于获取目标资源支持的通信选项(即允许的HTTP方法)。
PATCH:用于对资源应用部分修改。与PUT不同,PATCH不是替换整个资源,而是仅更新部分内容。PATCH不是幂等的(但可以设计为幂等)。
CONNECT:用于建立到目标资源的隧道(通常用于SSL通过未加密的HTTP代理)。
TRACE:用于沿着到目标资源的路径执行一个消息环回测试,用于诊断。
具体阐述
1.GET
用途:Read(读取)
特点:
安全的:GET 请求只应用于获取数据,不应改变服务器上的任何内容。
幂等的:多次执行相同的 GET 请求,返回的结果应该始终是一样的。
请求参数通常附加在 URL 的查询字符串中(例如:/users?id=123)。
响应体应包含所请求资源的表示形式(如 JSON、HTML 等)。
示例:
获取用户列表:GET /users
获取特定用户:GET /users/123
2. POST
用途:Create(创建)
特点:
不安全:POST 请求旨在改变服务器状态,通常会创建一个新资源。
不幂等:多次提交相同的 POST 请求,可能会导致创建多个不同的资源。例如,重复提交一个“下订单”的 POST 请求,会创建多个订单。
请求数据通常放在请求体中。
成功的响应通常返回 201 Created 状态码,并在 Location 头中提供新资源的 URL。
示例:
创建新用户:POST /users(在请求体中包含用户数据)
提交一个表单
3. PUT
用途:Update(更新)
特点:
不安全:因为它会修改服务器上的数据。
幂等的:这是 PUT 和 POST 的关键区别。无论你发送一次还是多次相同的 PUT 请求,资源的最终状态都是一样的。例如,将用户年龄设置为 25 岁,执行多少次结果都是 25 岁。
客户端需要提供目标资源的完整表示(即全部字段),而不仅仅是需要修改的字段。
请求数据放在请求体中。
示例:
完整更新用户 123 的信息:PUT /users/123(在请求体中包含完整的、更新后的用户数据)
4. DELETE
用途:Delete(删除)
特点:
不安全:因为它会改变服务器状态(删除数据)。
幂等的:删除一个资源后,再次请求删除它,资源依然是不存在的(通常会返回 404 Not Found 或 410 Gone),但服务器的“资源不存在”这个状态没有改变。所以效果是相同的。
示例:
删除用户 123:DELETE /users/123
其他重要的 HTTP 方法
5. PATCH
用途:部分更新一个已存在的资源。与 PUT 的“完整更新”形成对比。
特点:
不安全。
不一定是幂等的:这取决于具体的实现。例如,一个“增加余额 10 元”的 PATCH 操作,执行多次会产生不同的结果。而一个“将名字设置为 ‘Alice’”的 PATCH 操作是幂等的。最佳实践是将其设计为幂等的。
客户端只需提供需要修改的字段,而不是整个资源。
示例:
只更新用户的邮箱:PATCH /users/123(请求体:{“email”: “new@example.com”})
6. HEAD
用途:与 GET 方法完全相同,但服务器只返回响应头,不返回响应体。
特点:
安全的和幂等的。
用于检查资源是否存在、获取资源的元数据(如大小、类型、修改时间),而无需下载整个内容。
示例:
检查一个文件的大小:HEAD /large-file.pdf
7. OPTIONS
用途:用于查询目标资源支持哪些通信选项(即哪些 HTTP 方法)。
特点:
安全的和幂等的。
在 CORS 中非常重要,浏览器会预先发送 OPTIONS 请求来检查是否允许跨域请求。
示例:
查询 /users 支持哪些方法:OPTIONS /users(服务器可能在 Allow 头中返回:GET, POST, PUT, DELETE)

