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 |
浏览器兼容性
加载中…