HTTP请求方法

140 阅读3分钟

HTTP请求方法的幂等性

HTTP方法幂等性说明
GET获取资源数据,不会对服务器上的资源产生副作用。
PUT更新现有资源或创建资源,重复执行不会产生额外副作用。
DELETE删除资源,重复执行不会产生额外副作用。
HEAD获取资源的头部信息,不返回具体的资源内容。
OPTIONS获取服务器支持的HTTP请求方法,不对服务器上的资源进行修改。
TRACE执行一个回环诊断,并回显收到的请求内容,不对服务器上的资源进行修改,因此是安全的。但需要注意,TRACE请求可能泄露敏感信息,所以在生产环境中通常会被禁用或限制使用。
POST创建新资源或提交数据,重复执行会产生不同结果或创建多个资源。
PATCH部分更新资源,重复执行可能会产生累积效果。

每个请求方法的例子

GET 方法

GET 请求用于从服务器获取资源数据,不会对服务器上的资源产生副作用。

示例:获取用户信息

GET /users/1 HTTP/1.1
Host: example.com
Accept: application/json
{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

PUT 方法

PUT 请求用于创建或更新资源,多次执行相同的请求会产生相同的效果(幂等)。

示例:更新用户信息

PUT /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "Jane Doe",
  "email": "jane.doe@example.com"
}
{
  "id": 1,
  "name": "Jane Doe",
  "email": "jane.doe@example.com"
}

DELETE 方法

DELETE 请求用于删除资源,多次执行相同的请求会产生相同的效果(幂等)。

示例:删除用户

DELETE /users/1 HTTP/1.1
Host: example.com

响应:

HTTP/1.1 204 No Content

HEAD 方法

HEAD 请求用于获取资源的头部信息,不返回具体的资源内容。

示例:获取用户信息的头部信息

HEAD /users/1 HTTP/1.1
Host: example.com

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 123

OPTIONS 方法

OPTIONS 请求用于获取服务器支持的HTTP请求方法。

示例:获取服务器支持的HTTP方法

OPTIONS /users HTTP/1.1
Host: example.com

响应:

HTTP/1.1 200 OK
Allow: GET, POST, PUT, DELETE, OPTIONS

TRACE 方法

TRACE 请求用于执行一个回环诊断,并回显收到的请求内容,不对服务器上的资源进行修改,因此是安全的。但需要注意,TRACE请求可能泄露敏感信息,所以在生产环境中通常会被禁用或限制使用。

示例:回显请求

TRACE /users/1 HTTP/1.1
Host: example.com

响应:

HTTP/1.1 200 OK
Content-Type: message/http

TRACE /users/1 HTTP/1.1
Host: example.com

POST 方法

POST 请求用于在服务器上创建新资源或提交数据,多次执行相同的请求会产生不同结果或创建多个资源(非幂等)。

示例:创建新用户

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "name": "John Doe",
  "email": "john.doe@example.com"
}

响应:

{
  "id": 2,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

PATCH 方法

PATCH 请求用于对资源进行部分更新,多次执行相同的请求可能会产生累积效果(非幂等)。

示例:部分更新用户信息

PATCH /users/1 HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "email": "new.email@example.com"
}
{
  "id": 1,
  "name": "John Doe",
  "email": "new.email@example.com"
}