title | slug |
---|---|
POST |
Web/HTTP/Methods/POST |
{{HTTPSidebar}}
HTTP POST
方法发送数据给服务器。请求主体的类型由 {{HTTPHeader("Content-Type")}} 标头指定。
{{HTTPMethod("PUT")}} 和 POST
方法的区别是,PUT
方法是幂等的:调用一次与连续调用多次效果是相同的(即没有副作用),而连续调用多次相同的 POST
方法可能会有副作用,比如多次提交同一订单。
一个 POST
请求通常是通过 HTML 表单发送的,并导致服务器的相应修改。在这种情况下,内容类型(content type)是通过在 {{HTMLElement("form")}} 元素中设置正确的 enctype
属性,或是在 {{HTMLElement("input") }} 和 {{HTMLElement("button")}} 元素中设置 formenctype
属性来选择的:
application/x-www-form-urlencoded
:数据被编码成以'&'
分隔的键值对,同时以'='
分隔键和值。键和值中非字母或数字的字符会被 URL 编码,这也是这种类型不支持二进制数据的原因(应使用multipart/form-data
代替)。multipart/form-data
:每个值是在一块数据(“主体部分”)中发送的,由用户代理指定的分隔符(“boundary”)将每个部分分离开。键值在每个部分的Content-Disposition
标头中给出。text/plain
当 POST
请求是通过除 HTML 表单之外的方式(例如使用 {{domxref("XMLHttpRequest")}})发送时,请求主体可以是任何类型。正如 HTTP 1.1 规范中所描述的那样,POST
被设计用于以统一的方法来涵盖以下功能:
- 对现有资源进行注释
- 在公告板,新闻组,邮件列表或类似的文章组中发布消息;
- 通过注册模板新增用户;
- 向数据处理过程提供一批数据,例如提交一个表单;
- 通过追加操作,扩展数据库数据。
请求是否有主体 | 是 |
---|---|
成功的响应是否有主体 | 是 |
{{Glossary("Safe/HTTP", "安全")}} | 否 |
{{Glossary("Idempotent","幂等")}} | 否 |
{{Glossary("Cacheable","可缓存")}} | 仅在包含足够新的信息时 |
允许在 HTML 表单中使用 | 允许 |
POST /test
使用默认的 application/x-www-form-urlencoded
作为 content type 的简单表单:
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
作为 content type 的表单:
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--
{{Specifications}}
{{Compat}}
- {{HTTPHeader("Content-Type")}}
- {{HTTPHeader("Content-Disposition")}}
- {{HTTPMethod("GET")}}