POST
HTTP 方法
指定 HTTP 方法 POST
POST 方法请求目标资源根据资源自身的特定语义处理请求中包含的表示。例如,POST 可用于以下功能(除其他外):
- 向数据处理流程提供数据块(如输入 HTML 表单的字段);
- 向公告板、新闻组、邮件列表、博客或类似的文章组发布消息;
- 创建源服务器尚未识别的新资源;以及
- 向资源的现有表示添加数据。
源服务器会根据 POST 请求的处理结果选择适当的状态代码来表示响应语义;在对 POST 的响应中可能会收到本规范定义的几乎所有状态代码(206(部分内容)、304(未修改)和 416(范围无法满足)除外)。
如果由于成功处理了 POST 请求而在源服务器上创建了一个或多个资源,则源服务器应当发送一个 201(已创建)响应,其中包含一个 Location 标头字段,该字段提供了已创建的主要资源的标识符(第 7.1.2 节)和该资源的表示方法。
对 POST 请求的响应只有在包含明确的新鲜度信息时才可缓存(参见 [RFC7234] 第 4.2.1 节)。然而,POST 缓存并未广泛实施。如果原服务器希望客户端能够以一种可以被以后的 GET 重新使用的方式缓存 POST 的结果,那么原服务器 MAY 会发送一个 200(OK)响应,其中包含结果和一个 Content-Location 头信息字段,该字段的值与 POST 的有效请求 URI 相同(第 3.1.4.2 节)。1.4.2)。
如果处理 POST 的结果等同于现有资源的表示,那么源服务器MAY将通过发送 303(请参阅其他)响应将用户代理重定向到该资源,并在 Location 字段中包含现有资源的标识符。这样做的好处是为用户代理提供了一个资源标识符,并通过一种更适合共享缓存的方法来传输表示,但如果用户代理尚未缓存表示,则需要付出额外请求的代价。
HTTP 方法 POST 是由互联网工程任务组(IETF)和万维网联盟(W3C)在文档 RFC 7231 第 4.3.3 节中规定的。
POST 方法说明
正在进行中的工作
HTTP 方法 POST 示例
Request header:
POST /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Content-Type: application/json
Content-Length: 100
Connection: keep-alive
Request body:
{
"key": "value",
"foo": "bar"
}
POST /data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537
Accept: application/json
Accept-Language: de-DE,de;q=0.5
Content-Type: application/json
Content-Length: 100
Connection: keep-alive
Request body:
{
"key": "value",
"foo": "bar"
}
Response header:
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache
Location: http://api.example.com/data/123
Response body:
{
"status": "success",
"id": 123
}
Content-Type: application/json
Date: Mon, 31 July 2023 14:58:12 GMT
Server: Apache/2.4.7 (Ubuntu)
Cache-Control: no-cache
Location: http://api.example.com/data/123
Response body:
{
"status": "success",
"id": 123
}