2011-03-03 106 views
31

我刚刚为我的最新应用程序之一构建了一个RESTful API。我还构建了一个简单的管理界面脚手架类,它将枚举资源并构建简单的表单和表格以编辑,创建,删除等。为什么现代浏览器不支持PUT和DELETE表单方法?

为了更新和删除资源,该类使用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="[email protected]" /> 
<input type="submit" value="Update" /> 
</form> 

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

我更喜欢当应用程序正常回退到使用相同方法的标准HTML时,而不必使用隐藏字段和类中的逻辑,或者更糟糕的是,将方法放在URI中并且允许GET工作。

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

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

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

+0

确定有关@JoostBaaij我没有尝试自己,但MDN只字不提它https://developer.mozilla.org/en-US/docs/Web/HTML/Element /表格 – 2013-10-22 16:00:14

+0

@JoostBaaij只需双重检查。提交此表格http://jsbin.com/IWoWiRi/1/然后在这里检查请求http://requestb.in/ol62w4ol?inspect Chrome30,FF24,IE10'method =“PUT”'all显示为'GET '所以我很抱歉,但你错了。 – 2013-10-22 16:08:35

+0

如果没有,您仍然可以在端口80上打开telnet连接,并使用客户端脚本启动命令。 – user2284570 2013-10-22 20:04:30

回答

8

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

+1

我知道,我想知道为什么今天REST的普及,它并没有在“HTML5浏览器”中实现 – nikcub 2011-03-04 06:33:24

+0

XHTML 2(XForms 1.1更精确)规范包括PUT和DELETE方法。请参阅http://www.w3.org/TR/xforms11/#submit-put – Harri 2011-03-04 07:28:21

+0

处于当前状态的HTML5不包含这些方法,http://dev.w3.org/html5/spec/Overview.html#attr -fs-method – Harri 2011-03-04 07:29:16

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方法。

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

+0

谢谢.. http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work – 2013-04-30 04:38:16

+1

Laravel(php)也是如此。 – Praveen 2015-11-23 05:58:40

5

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

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

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

+0

技术上这已经在评论中注意到了,但是。我认为这可以作为答案。 – 2013-10-29 14:52:41

+0

谢谢@GeorgeMauer – 2013-10-29 15:04:33

相关问题