POST
HTTP POST
方法 将数据发送到服务器。请求主体类型由 Content-Type
标头指示。
PUT
和 POST
之间的区别在于 PUT
是幂等的:调用一次或多次连续调用具有相同的效果(即没有副作用),而连续的相同 POST
可能会有额外的影响,例如多次通过订单。
POST
请求通常通过 HTML 表单 发送,并导致服务器上的更改。在这种情况下,内容类型是通过将适当的字符串放入 enctype
属性中 <form>
元素或 formenctype
属性中 <input>
或 <button>
元素。
application/x-www-form-urlencoded
:键值对用'&'
分隔,键值之间用'='
分隔。键值中非字母数字字符都经过 百分比编码:这就是为什么这种类型不适合用于二进制数据(请改用multipart/form-data
)的原因。multipart/form-data
:每个值都作为一块数据(“主体部分”)发送,每个部分之间用用户代理定义的分隔符(“边界”)分隔。键值对在每个部分的Content-Disposition
标头中给出。text/plain
当 POST
请求通过除 HTML 表单之外的方法发送时,例如 fetch()
调用,主体可以采用任何类型。正如 HTTP 1.1 规范中所述,POST
的设计是为了允许一种统一的方法来涵盖以下功能
- 对现有资源的注释
- 将消息发布到公告板、新闻组、邮件列表或类似的群组文章中;
- 通过注册模态添加新用户;
- 提供数据块,例如提交表单的结果,到数据处理流程;
- 通过追加操作扩展数据库。
语法
http
POST /test
示例
使用默认 application/x-www-form-urlencoded
内容类型的简单表单
http
POST /test HTTP/1.1
Host: foo.example
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
field1=value1&field2=value2
使用 multipart/form-data
内容类型的表单
http
POST /test HTTP/1.1
Host: foo.example
Content-Type: multipart/form-data;boundary="boundary"
--boundary
Content-Disposition: form-data; name="field1"
value1
--boundary
Content-Disposition: form-data; name="field2"; filename="example.txt"
value2
--boundary--
规范
规范 |
---|
HTTP 语义 # POST |
浏览器兼容性
BCD 表格仅在浏览器中加载