它们似乎都在向体内的服务器发送数据,那么它们有何不同呢?
HTTP 放置:
PUT 将文件或资源放在特定的 URI 上,并且准确地放在该 URI 上。如果该 URI 中已有文件或资源,则 PUT 会替换该文件或资源。如果那里没有文件或资源,则 PUT 创建一个。PUT 是幂等的,但矛盾的是 PUT 响应是不可缓存的。
PUT 的 HTTP 1.1 RFC 位置
HTTP 发布:
POST 将数据发送到特定的 URI,并期望该 URI 上的资源来处理请求。此时,Web 服务器可以确定如何处理指定资源上下文中的数据。POST 方法不是幂等的,但是只要服务器设置适当的 Cache-Control 和 Expires 标头,POST 响应 是可缓存的。
官方 HTTP RFC 指定 POST 为:
POST 的 HTTP 1.1 RFC 位置
POST 和 PUT 的区别:
RFC 本身解释了核心区别:
POST 和 PUT 请求的根本区别体现在 Request-URI 的不同含义上。POST 请求中的 URI 标识将处理封闭实体的资源。该资源可能是一个数据接受进程,一个通往其他协议的网关,或者一个接受注释的单独实体。相反,PUT 请求中的 URI 标识了请求中包含的实体——用户代理知道 URI 的意图,服务器不得尝试将请求应用于其他资源。如果服务器希望将请求应用于不同的 URI,它必须发送 301(永久移动)响应;然后用户代理可以自己决定是否重定向请求。
此外,更简洁一点的是,RFC 7231 第 4.3.4 节 PUT状态(强调添加),
4.3.4. 放 PUT 方法请求目标资源的状态是 created或replaced具有由请求消息有效负载中包含的表示定义的状态。
4.3.4. 放
PUT 方法请求目标资源的状态是 created或replaced具有由请求消息有效负载中包含的表示定义的状态。
created
replaced
使用正确的方法,不相关的:
REST ROA与 SOAP 相比的一个好处是,在使用 HTTP REST ROA 时,它鼓励正确使用 HTTP 动词/方法。因此,例如,当您想在该确切位置创建资源时,您只会使用 PUT。而且您永远不会使用 GET 来创建或修改资源。