POST 请求方法
POST
HTTP 方法用于向服务器发送数据。请求正文的类型由 Content-Type
标头指示。
PUT
和 POST
的区别在于 PUT
是幂等的:调用一次与连续多次调用没有区别(没有副作用)。连续相同的 POST
请求可能会产生额外的效果,例如多次创建相同的订单。
HTML 表单通常使用 POST
发送数据,这通常会导致服务器上的更改。对于 HTML 表单,正文内容的格式/编码由 <form>
元素的 enctype
属性或 <input>
或 <button>
元素的 formenctype
属性决定。编码可以是以下之一:
application/x-www-form-urlencoded
:键和值以键值对的形式编码,用 & 符号分隔,键和值之间用等号 (=
) 分隔(例如,first-name=Frida&last-name=Kahlo
)。键和值中的非字母数字字符都经过百分比编码:这就是为什么这种类型不适合与二进制数据一起使用,你应该为此目的使用multipart/form-data
。multipart/form-data
:每个值都作为数据块(“正文部分”)发送,用户代理定义的定界符(例如,boundary="delimiter12345"
)分隔每个部分。键在每个部分或数据块的Content-Disposition
标头中描述。text/plain
当 POST
请求是在调用 fetch()
之后发送的,或者出于 HTML 表单之外的任何其他原因时,正文可以是任何类型。如 HTTP 1.1 规范所述,POST
旨在提供一种统一的方法来涵盖以下功能:
- 对现有资源的注释
- 向公告板、新闻组、邮件列表或类似的文章组发布消息
- 通过注册表单添加新用户
- 向数据处理过程提供数据块,例如提交表单的结果
- 通过追加操作扩展数据库
语法
POST <request-target>["?"<query>] HTTP/1.1
<请求目标>
-
与
Host
标头中提供的信息结合使用时,标识请求的目标资源。这是对源服务器的请求中的绝对路径(例如,/path/to/file.html
),以及对代理的请求中的绝对 URL(例如,http://www.example.com/path/to/file.html
)。 <query>
可选-
一个可选的查询组件,前面带有一个问号
?
。通常用于以key=value
对的形式携带识别信息。
示例
URL 编码的表单提交
使用 application/x-www-form-urlencoded
内容编码(默认)的表单发送的请求中,正文包含以 key=value
对形式表示的表单数据,每对由 &
符号分隔,如下所示:
POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
field1=value1&field2=value2
多部分表单提交
当表单包含文件或大量数据时,使用 multipart/form-data
编码。此请求正文使用边界字符串分隔表单的每个部分。此格式的请求示例:
POST /test HTTP/1.1
Host: example.com
Content-Type: multipart/form-data;boundary="delimiter12345"
--delimiter12345
Content-Disposition: form-data; name="field1"
value1
--delimiter12345
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--delimiter12345--
Content-Disposition
标头指示应如何处理表单数据,如果适用,指定字段 name
和 filename
。
规范
规范 |
---|
HTTP 语义 # POST |
浏览器兼容性
加载中…