有什么理由不使用Web应用程序中的HTTP PUT和DELETE?

环顾四周,我不能命名一个单一的Web应用程序(而不是Web服务),除了GET和POST请求之外,它使用任何东西。 这是否有特定的原因? 做一些浏览器(或服务器)不支持任何其他types的请求? 或者这仅仅是出于历史原因? 我想利用PUT和DELETE请求让我的生活在服务器端更容易,但我不愿意,因为没有其他人。

实际上相当数量的人使用PUT和DELETE,主要用于非浏览器API。 一些例子是Atom发布协议和Google数据API:

除此之外,由于大多数浏览器不支持通过窗体的PUT和DELETE,因此您不会在常见用法中看到PUT / DELETE。 HTML5似乎正在解决这个问题:

浏览器应用程序的工作方式是:人们使用PUT和DELETE来deviseREST式应用程序,然后通过来自浏览器的POST来“隧道式”地发送这些请求。 例如,看到这个问题,关于Ruby on Rails如何使用隐藏字段完成此操作:

  • 我如何模仿Rails和GWT的PUT / DELETE?

所以,你不会自己devise你的应用程序,并考虑更多的HTTP动词。

编辑:顺便说一句,如果你好奇为什么PUT / DELETE从基于浏览器的表单post丢失,事实certificate没有真正的好技术原因。 在rest讨论邮件列表中阅读这个主题,特别是Roy Fielding的评论,对于某些情况很有意思:

编辑:有一些意见,是否AJAX库支持所有的方法。 它确实涉及到XMLHttpRequest的实际浏览器实现。 我以为有人可能会发现这个链接方便,这将testing您的浏览器,以查看HttpRequest对象与各种HTTP选项的兼容性。

不幸的是,我不知道收集这些结果的参考。

很简单, HTML 4.01 form元素只允许其method属性中的值“ POST ”和“ GET

一些具有严格安全策略的代理服务器可能会丢弃它 反正我正在使用PUT和DELETE。

我读过一些浏览器不支持正确的其他HTTP方法,虽然我不能命名任何细节。

Rails,特别是,将打包您的表单与一个方法参数明确设置,即使浏览器不支持这些方法。 这似乎是一个合理的预防措施,如果你要这样做。

我说使用HTTP的所有function,浏览器是该死的,哈哈。 也许这将激励更完整和正确地使用HTTP协议。 networking上发生的事情比只有POST和GET更多。 关于浏览器实现时间反映了这一点

这取决于你的浏览器和Ajax库。 例如jQuery支持所有的HTTP方法,即使浏览器可能不支持。 请参阅“type”属性上的jQuery“ajax”文档 。

Restlet Java框架允许您通过HTML POST操作来传送PUT和DELETE请求。 要做到这一点,你只需要添加method = put或method = delete到你的URI的查询string,例如:

 http://www.example.com/user=xyz?method=delete ... 

这与Ruby on Rails的方法相同(如上面的@ars所述)。

就个人而言,我真的没有看到在Web应用程序中使用PUT或DELETE的任何目的。 应用程序执行的所有操作都是读取或写入,也就是input输出。 为什么你需要在HTTP请求的头部中区分操作的性质? 我可以使用form / object / object_id的相同url进行ajax调用,并执行多个操作,如删除,更新,获取值或创build。 只是通过查看url,我不知道它是哪一个。 只使用GET和POST,我的url将是:

/对象/ ID /删除

/对象/ ID /创build

/对象/ ID /更新

/ object / id – >隐含的GET

等等

根据我有限的经验,在许多情况下,这比隐藏的标题请求types要干净得多。 我不是说永远不要使用PUT或DELETE,只是说,只有在绝对需要时才使用它们。

请参阅Leonard Richardson的“RESTful Web API”,阅读有关REST式Web API中有关HTTP请求方法的不同用例和约定的更多信息。