2009-12-06 91 views
27

我想知道如何在浏览器中执行除POST/GET以外的其他功能(?HTML表单或Ajax)的最终答案(?),因为我听到混合报告什么浏览器允许什么(特别是在ajax方面)。从浏览器中执行HTTP PUT

当以REST风格构建后端时,很好使用PUT,HEAD,OPTIONS等适当的动词...在rails中,隐藏表单字段方法(IIRC?)用于模拟此操作,并在后端发送给相应的动词控制器。现在(2009年末)是否有必要?什么是公约?

回答

32

似乎大多数浏览器不支持除GET和POST之外的其他方法,因为它是HTML表单的限制。 下面是关于该主题的另一个问题:

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

为了模拟PUT,DELETE等方法,你可以隐藏的输入添加到正规的GET/POST形式与伪法和有正如你所提到的那样,你的应用程序将它翻译,以便你的控制器看到它,就好像它是一个真正的PUT请求。我已经看到这种方法在谷歌sitebricks中使用(在Java中 - 对不起,我没有任何特定于轨道的引用,但这可能至少会给你一个想法)在this code.我认为这可能是我们坚持的方法HTML规范中的一些变化(以及带有它的浏览器)

但是,主要浏览器在AJAX中支持GET,POST,PUT和DELETE,所以如果不依赖于隐藏输入在HTML表单上。

+0

不错 - 希望将这些链接在一起将有助于为未来寻找这样的事情的其他人提供谷歌果汁。 – 2009-12-07 22:04:34

+0

我还应该补充一点,我相信PUT和DELETE是根据HTML5支持的:http://www.w3.org/TR/html5/forms。html#form-submission-0 (不知道HEAD不过)。 – mpobrien 2009-12-07 22:09:30

+2

我认为AJAX比起初建议的“隧道效应”要好很多。 另外,关于HTML5的好处。但我不清楚哪些浏览器支持PUT和删除表单在这一点上。 – 2009-12-08 23:07:06

6

您必须使用AJAX来执行除GET和POST之外的任何操作,我会推荐jQuery Forms插件来允许您将表单作为PUT提交。

5

HTTP有4个GET,POST,PUT,UPDATE。但大多数浏览器只支持GET和POST。通过请求发送附加参数来模拟PUT和UPDATE。在rails中_method =“PUT”或_method =“UPDATE”。

3

我相信这个问题的首选解决方案是使用X-HTTP-Method-Override标头。如果你搜索这个术语,你应该找到很多关于如何使用它的例子。

1

我想你会发现许多防火墙阻止了一些较酷的HTTP动词。所以,虽然它可能适用于你,但如果你想为公司网站上的普通大众创造一些东西,你可能想要坚持基本的东西。

+0

好点 - 同样适用于“奇数”标题。 – 2009-12-07 22:01:13

1

除了ajax生成的请求之外,获取这些附加方法的另一种方法是使用webdav客户端。文件系统客户端存在于所有主要的操作系统中,并且还有一些额外的客户端可以支持它用于网络创作。

例如,Amaya网络浏览器允许您使用PUT方法编辑Web上的文档并将其直接保存到服务器。在其他浏览器上有这样的插件,并且一些Web图形编辑器(例如Dreamweaver)也支持WebDAV。

除了HTTP1.1中定义的方法以外,WebDAV还支持许多其他方法供自己使用。