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

我刚刚为我的最新应用程序之一构建了一个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并允许GET工作。

我想不出任何浏览器为什么不支持其他HTTP方法的原因,因为开发人员只是通过黑客GET或使用POST来解决它。

我搜索了一个答案,并能够找到它指定为XHTML 2.0规范的一部分。 在HTML5规范中没有提及它。

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


一些web框架(例如Ruby on Rails)通过在表单中​​包含一个隐藏的_method参数,并使用“actual”方法的值来解决这个问题,例如:

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

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

不知道这是否对你有帮助。


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


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

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

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

链接地址: http://www.djcxy.com/p/41115.html

上一篇: Why don't the modern browsers support PUT and DELETE form methods?

下一篇: Test file upload using HTTP PUT method