企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### 1.3 何时使用 POST 方法 本节简要介绍POST 的不同应用场合。 #### 问题描述 您想知道POST 方法的潜在应用场合。 #### 解决方案 在以下场合中使用POST 方法:  创建新的资源,把资源作为一个工厂,详见 1.4 节。  通过一个控制器资源来修改一个或多个资源。  执行需要大数据输入的查询,详见 5.3 节。  在其他HTTP 方法看上去不合适时,执行不安全或非幂等的操作。 #### 问题讨论 在 HTTP 协议中,POST 方法的语义是最通用的,HTTP 规范定义这个方法可以应用于以下场合:  对已存在资源做评论或注解。  向公告板、新闻组、邮件列表或类似的文章群组发送消息。  提供数据块,例如,作为表单提交到数据处理器处理后的结果。  通过追加操作扩充数据库。 所有这些操作都是不安全和非幂等的,所有基于HTTP 的工具都会这样对待POST,例如:  缓存不会缓存这一方法的响应。  网络爬虫和类似的工具不会自动发起POST 请求。  大部分通用的HTTP 工具不会自动重复提交POST 请求。 这些处理方式给服务器留下了巨大的空间,将POST作为针对多种操作的一个通用方法,包括 穿隧(tunneling)注2,考虑以下例子: ~~~ # 一条穿隧了HTTP POST的XML RPC消息 POST /RPC2 HTTP/1.1 Host: www.example.org Content-Type: text/xml;charset=UTF-8 <methodName>messages.delete</methodName> <params> <param> <value><int>1234</int></value> </param> </params> </methodCall> ~~~ 这是一个XML-RPC(`http://www.xmlrpc.com/`)通过POST方法穿隧操作的例子。另一个知名的例子是HTTP上的SOAP: ~~~ # 一条穿隧了HTTP POST的SOAP消息 POST /Messages HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=UTF-8 <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <soap:Body xmlns:ns="http://www.example.org/messages"> <ns:DeleteMessage> <ns:MessageId>1234</ns:MessageId> </ns:DeleteMessage> </soap:Body> </soap:Envelope> ~~~ 这两个例子都是对POST 方法的误用。例如,DELETE 方法在此更为适用: ~~~ # 使用 DELETE DELETE /message/1234 HTTP/1.1 Host: www.example.org ~~~ 另外,以下情况必须使用POST,即使 GET 才是正确的方法: *  浏览器等HTML 客户端在发起请求获取相关资源时,将页面的 URI 作为Referer 头。这可能会把包含在URI 中的敏感信息泄露给外部服务器。这种情况下,使用传输层安全协议(Transport Layer Security,TLS,SSL 的接班人),或者,如果不能加密URI 中的敏感信息,考虑使用POST 处理HTML 文档。 *  正如将在5.3 节讨论的,当客户端提交的查询包含太多参数时,POST 可能是唯一的选择。但即使是以上情况,POST 也应当是最后的选择。