POST和PUT HTTP请求之间有什么区别?
他们似乎都在向身体内的服务器发送数据,那么是什么使他们与众不同呢?
HTTP PUT:
PUT把一个文件或资源放在一个特定的URI处,并且正好在那个URI处。 如果该URI处已有文件或资源,则PUT将替换该文件或资源。 如果那里没有文件或资源,PUT创建一个。 PUT是幂等的,但矛盾的是PUT响应不可缓存。
PUT的HTTP 1.1 RFC位置
HTTP POST:
POST将数据发送到特定的URI,并期望该URI处的资源处理该请求。 此时,Web服务器可以确定如何处理指定资源上下文中的数据。 POST方法不是幂等的,但只要服务器设置适当的Cache-Control和Expires标头,POST响应就可以缓存。
官方HTTP RFC指定POST为:
POST的HTTP 1.1 RFC位置
POST和PUT之间的区别:
RFC本身解释了核心差异:
POST和PUT请求之间的根本区别反映在请求URI的不同含义中。 POST请求中的URI标识将处理封闭实体的资源。 该资源可能是数据接受过程,其他协议的入口或接受注释的独立实体。 相比之下,PUT请求中的URI标识请求附带的实体 - 用户代理知道URI的目标是什么,服务器不能尝试将请求应用于其他资源。 如果服务器希望将请求应用于不同的URI,它必须发送301(永久移动)响应; 用户代理可以自行决定是否重定向请求。
使用正确的方法,无关紧要:
REST ROA和SOAP的一个好处是,当使用HTTP REST ROA时,它鼓励正确使用HTTP动词/方法。 因此,例如,只有在想要在该确切位置创建资源时才能使用PUT。 而且你永远不会使用GET来创建或修改资源。
只有语义。
HTTP PUT
应该接受请求的主体,然后将其存储在由URI标识的资源中。
HTTP POST
更通用。 它应该在服务器上启动一个动作。 该操作可以将请求主体存储在由URI标识的资源中,或者可以是不同的URI,也可以是不同的操作。
PUT 就像文件上传。 放入URI会影响该URI。 对URI的POST可能会有任何影响。
举例说明REST风格的资源:
带有大量书籍信息的“POST / books”可能会创建一本新书,并用标识该书的新URL进行响应:“/ books / 5”。
“PUT / books / 5”必须创建一个ID为5的新书,或用ID 5替换现有的书。
在非资源风格下,POST可以用于任何有副作用的事情。 另外一个区别是PUT应该是幂等的 - 对于同一个URL,同一个数据的多个PUT应该没问题,而多个POST可能会创建多个对象,或者你的POST动作不管它是什么。
链接地址: http://www.djcxy.com/p/1075.html上一篇: What's the difference between a POST and a PUT HTTP REQUEST?
下一篇: What are the best/common RESTful url verbs and actions?