应该在表单中使用 PUT 和 DELETE 吗?

Posted

技术标签:

【中文标题】应该在表单中使用 PUT 和 DELETE 吗?【英文标题】:Should PUT and DELETE be used in forms? 【发布时间】:2011-07-06 23:38:24 【问题描述】:

假设我的 Web 应用程序在服务器端完全支持 PUT 和 DELETE,我应该使用它们吗?

基本上我的问题是有多少浏览器支持这个:

<form method="PUT">

<form method="DELETE">

除了兼容 REST 之外,使用这两种 HTTP 方法还有什么好处吗? (假设这两种方法的替换是常用的POST)

【问题讨论】:

【参考方案1】:

不,GETPOSTmethod 属性的唯一有效 HTTP 方法值。请参阅html spec 了解更多信息。

相信您可以在 AJAX 请求中使用它们。

【讨论】:

链接已损坏。【参考方案2】:

您的问题涉及两个密切相关但独立的标准,HTTP 和 HTML。 PUT 和 DELETE 方法是 HTTP 的一部分。在 HTTP 中,它们在 RESTful 接口和其他基于 HTTP 的服务(如 Webdav)中有着明显的用途。

直到版本 4 的 HTML 仅定义了表单的 POST 和 GET 使用。此时的 HTML5 似乎可以支持更多的方法。 [注意,当前的 w3 草案中不包含支持]

任何当前的浏览器支持(我不直接知道任何支持)都将非常有限,并且仅作为最前沿的实验才真正有用。

【讨论】:

当前的 HTML5 草稿支持表单中的PUTDELETE。相关部分目前在“最后一次调用 cmets”中,因此可能它们将被实施,但不幸的是它看起来不像。我认为它曾经在那里,然后被移除。 关于浏览器支持,mozilla 对 FF4 有兴趣,这表明他们确实支持它但现在已将其删除 - bugzilla.mozilla.org/show_bug.cgi?id=600813。 @andrew 确实,它在几年前一直是草案的一部分,但在去年年底被删除。我的意图不是暗示它将成为标准的一部分,只是它可能是。 我对删除这些方法感到非常失望,因为它们很有意义。有没有人有这个决定背后的原因的链接?。 @Triztian w3.org/Bugs/Public/show_bug.cgi?id=10671 全文:programmers.stackexchange.com/a/211790/26123【参考方案3】:

GET、POST、PUT 和 DELETE(还有其他)是 HTTP 标准的一部分,但目前仅限于 HTML 表单中的 GET 和 POST。

正如 Andrew 所说,您可以在 AJAX 请求中使用 PUT 和 DELETE;但是,这只适用于某些浏览器(请参阅http://api.jquery.com/jQuery.ajax/)。

【讨论】:

以上是关于应该在表单中使用 PUT 和 DELETE 吗?的主要内容,如果未能解决你的问题,请参考以下文章

csharp 使用PUT或DELETE覆盖html表单方法

SpringMVC的controller提供了PUT和DELETE的请求方式怎么使

同时使用 Delete 和 Put 时无法在 HBase 中插入新数据

CSRF 是不是可以使用 PUT 或 DELETE 方法?

可以使用 HTTP DELETE 停用记录吗?

Django中使用表单