为什么我需要使用PUT或DELETE Http动词?

6

在 MVC 2 发布后,我开始查看和使用其中的新功能,但是我不明白 PUTDELETE 动词的用途。

我搜索了一些文章,但是仍然不理解。

DELETEPUT 的主要目的是什么?它们与使用 GETPOST 方法相比有何优势(即使我可以使用 GET 和 POST 处理所有请求)?


1
重复问题:https://dev59.com/xHRC5IYBdhLWcg3wS_EF https://dev59.com/7HNA5IYBdhLWcg3wfd4m - Esteban Küber
我也无法理解这些动词在现实生活中的实际用途。 有哪些实际场景需要使用这些动词,而不能通过get或post实现呢? 我认为这更多是一种哲学上的探讨,而非实际应用。 - Add080bbA
5个回答

13
  • GET:仅用于将信息发送回客户端。它应该是一个可重复的操作,没有副作用。

  • POST:它执行具有副作用的操作。它是不可重复的(如果您两次POST,则服务器会执行两次)。操作后,应使用GET将其重定向到另一页以显示结果。

  • DELETE:其唯一功能是执行破坏性操作,不可重复(一旦对象被删除,就没有其他要删除的内容)。

  • PUT:其功能是修改单个对象并使用类似POST的方式更新它的值。可重复。

您可以使用POST来模拟DELETE和PUT(因为某些Web浏览器无法识别DELETE和PUT)。

请仅使用GET来显示信息,而不是执行具有副作用的操作


1
你的意思是通过UPDATE来实现PUT吗?http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html - user131441
3
常用的词是幂等:多次重复操作会得到相同的结果。GET、PUT和DELETE都是幂等操作。GET也是安全的(不进行任何更改)。DELETE是幂等的,因为多次删除同一资源仍将其删除(尽管第二个请求可能不会“成功”)。POST请求不能保证是幂等的,但根据系统的不同,它们可能是幂等的。如果POST用于更新,则很可能是幂等的。 - Matthew Schinckel

4
在RESTful架构中,DELETE应该用于删除数据的请求,PUT应该用于插入数据的请求。

谢谢,这已经是我所知道的了,但是除了使用POST动词删除数据之外,它们是否有任何优势呢? - Barbaros Alp
POST将数据发送到运行在Web服务器上的代码(通常是生成网页的代码)。PUT将数据发送到Web服务器软件本身。 - Chris S
2
这里只能有一个Chris S! - Chris S
一个优点是,服务器端框架可以利用它是PUT或DELETE请求的事实,自动将请求路由到正确的控制器方法,而不必在URL中指定。但是,我不确定ASP.NET-MVC是否这样做... - Justin Ethier

2

基本上,它用于更好地区分操作/特权。

幂等方法和Web应用程序

PUT和DELETE方法被定义为幂等的,这意味着多个相同的请求应该与单个请求具有相同的效果。 GET、HEAD、OPTIONS和TRACE方法被规定为安全的,也应该是幂等的,因为HTTP是一种无状态协议。相比之下,POST方法不一定是幂等的,因此多次发送相同的POST请求可能会进一步影响状态或导致进一步的副作用(例如财务交易)。在某些情况下,这可能是可取的,但在其他情况下,这可能是由于意外发生的,例如当用户没有意识到他们的操作将导致发送另一个请求,或者他们没有收到足够的反馈表明他们的第一个请求成功。虽然 Web 浏览器在某些情况下可能会显示警报对话框,以警告用户重新加载页面可能会重新提交 POST 请求的情况,但通常由 Web 应用程序处理不应提交多次 POST 请求的情况。请注意,方法是否幂等并不受协议或 Web 服务器的强制执行。 完全可以编写一个 Web 应用程序,在其中(例如)通过 GET 或其他请求触发数据库插入或其他非幂等操作。 然而,忽略这个建议可能会导致不良后果,如果用户代理认为重复相同请求是安全的,而实际上它并不是安全的。

via 维基百科
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods


0

首先,你应该查看BlaM非常好的答案来回答这个(重复?)问题。

显然,你可以在不使用REST原则的情况下技术上创建/更新/删除资源,但你会错过一点。如果你仍然不真正理解REST背后的概念,Ryan Tomayko的博客文章是一个不错的起点。


-3

最初的目的是使用这些动词(更多关于RESTful系统)来编辑网页。它们已经被WebDAV扩展弃用。实际上,PUT和DELETE从未被使用过(或者只有自定义应用程序非常少使用)。


很少?这在今天并不完全正确,因为有许多RESTful框架可用。就我所知,它们并没有被弃用,只是WebDAV扩展在Windows上由于某种原因阻止了它们的使用。我还没有给你点踩,我想给你一个澄清的机会。 - the_drow
@the_drow,是真的。考虑到绝大多数的网络流量从未接近使用PUT或DELETE,我很自信地说它很少被使用。我所知道唯一使用PUT或DELETE的应用程序是与浏览器或超文本传输无关的数据抽象层。 - Chris S
如果你声称它们已经被弃用,那么为什么在HTML5中它们被添加到了表单的方法属性中呢?另外,你还没有回应我的关于WebDAV的评论,如果它废弃了PUT和DELETE,那么它就不符合RESTful的标准,因此使用asp.net mvc并希望禁用它的程序员会受到影响。 - the_drow
1
@The_drow,WebDAV中替换了原始的PUT和DELETE命令。HTML5是一个文档语言规范,提供了传输的建议,而不是通信协议。我认为你误解了RESTful系统的含义,它并不本质上需要PUT和DELETE动词(无论是来自原始规范还是WebDAV规范)。 - Chris S
如果没有创建和删除方式,那么WebDAV就不符合RESTful的要求,这是我的意思。 - the_drow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接