scala中的RESTful http DELETE方法(播放2.0)

ant*_*yer 2 rest scala playframework-2.0

我正在使用Play 2.0构建应用程序.
只要Play表单生成器不会生成本机http"删除"请求方法,它应该替换为"Get"或"Post".

@form(routes.Application.delete(id), 'class -> "topRight") {
    <input type="submit" value="Delete this computer" class="btn danger">
}
Run Code Online (Sandbox Code Playgroud)

根据Play示例,"Post"应该用于"删除"目的.虽然使用"Get"非常舒服,因为表单可以用简单的链接替换(特别是在单个页面上有这些链接的列表)

那么有什么理由使用POST来模拟DELETE吗?

Sus*_*ter 10

使用的原因POST进行模拟DELETE ,而不是 GET因为一些HTTP动词(又名方法)被认为是由HTTP规范安全.这些方法是HEAD,GET,OPTIONSTRACE.这意味着在使用这些HTTP方法发出请求时不应该有应用程序状态的任何副作用.记录,缓存或计数器增量通常不被视为应用程序状态修改,除非它是应用程序域的一部分.

之所以用POST了仿真DELETE,而不是直接使用要求DELETE在网络形式的,因为一些浏览器不支持DELETE直接.许多使用帮助程序生成表单标记的Web框架(如Play和Rails)使用您引用的技巧将请求映射到代码中的相应REST-ish操作.有关详细信息,请参阅浏览器中的HTTP方法支持.有关此主题的更多信息,请参阅此SO问题.根据W3C针对HTML5的最新候选推荐,HTML5 FORM元素不支持method除GET或POST之外的属性的值.FORMHTML 4.01中元素也是如此.