为什么现代浏览器不支持PUT和DELETE表单方法?

时间:2011-03-03 06:50:42

标签: html browser specifications

我刚刚为我的一个最新应用程序构建了一个RESTful API。我还构建了一个简单的管理界面脚手架类,它将枚举资源并构建简单的表单和表来编辑,创建,删除等。

为了更新和删除资源,该类输出一个带有PUT和DELETE方法的表单,非常简单:

<form action="/posts/xxxxxxx" method="DELETE">
<input type="submit" value="Delete" />
</form>

<form action="/posts/xxxxxxx" method="PUT">
<input type="text" name="username" value="nikcub" />
<input type="text" name="fullname" value="Nik Cubrilovic" />
<input type="text" name="email" value="nikcub@email.com" />
<input type="submit" value="Update" />
</form>

很简单。如果检测到Javascript,则它将拦截表单并使用XMLHTTPRequest提交回来。 Javascript支持其他HTTP方法,但为什么现代浏览器不支持PUT和DELETE方法?它最终发送一个GET。

我希望当应用程序优雅地回退到标准HTML时使用相同的方法,而不是必须使用隐藏字段和类中的逻辑,或者更糟糕的是,将方法放在URI中并允许开始工作。

我无法想到浏览器不支持其他HTTP方法的任何原因,因为开发人员无论如何都是通过黑客攻击GET或使用POST来解决它。

我搜索了一个答案,并且能够将其指定为the XHTML 2.0 spec的一部分。没有提到它in the HTML5 spec

“HTML5兼容”浏览器不支持它的任何原因?我在哪里可以发布请求以打开此备份并在浏览器中实现它?

3 个答案:

答案 0 :(得分:19)

某些Web框架(例如Ruby on Rails)通过在表单中​​包含隐藏的_method参数以及“实际”方法的值来解决这个问题,例如:

<form action="/posts/xxxxx" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="delete">
</form>

然后,框架在处理之前重写服务器端的请求,以使用_method参数的值作为HTTP方法。

不知道这对你有帮助。

答案 1 :(得分:8)

HTML 4.01仅支持发布和获取,请参阅http://www.w3.org/TR/html4/interact/forms.html#h-17.3不确定其他HTML规范。

答案 2 :(得分:6)

实际上我做了很少的研究和研究。在其他Stackexchange论坛上找到了这个答案。

我知道发布链接不是一个好的答案,但我不知道确切的答案。所以,这是你解决疑问的唯一方法。

https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms