我正在使用 Play 2.0 构建应用。
至于 Play 表单生成器不会生成原生 http“Delete”请求方法,它应该被替换为“Get”或“Post”。
@form(routes.Application.delete(id), 'class -> "topRight") {
<input type="submit" value="Delete this computer" class="btn danger">
}
根据 Play 示例,“发布”应该用于“删除”目的。尽管使用“获取”非常方便,因为可以用一个简单的链接替换表单(尤其是在单个页面上列出这些链接)
那么有没有理由使用 POST 来模拟 DELETE?
最佳答案
使用 POST
来模拟 DELETE
而不是 GET
的原因是因为一些 HTTP 动词(又名方法) 被 HTTP 规范认为是安全的。 These methods are HEAD
, GET
, OPTIONS
and TRACE
.这意味着在使用这些 HTTP 方法发出请求时,应用程序状态不应有任何副作用。日志记录、缓存或计数器增量通常不被视为应用程序状态修改,除非它是应用程序域的一部分。
使用 POST
来模拟 DELETE
请求而不是直接在 Web 表单中使用 DELETE
的原因是因为许多浏览器都这样做不支持直接DELETE
。许多使用帮助程序生成表单标记的 Web 框架,例如 Play 和 Rails,使用您提到的技巧将请求映射到代码中相应的 REST-ish 操作。参见 HTTP Method Support in Browsers了解更多信息。另请参阅 this SO question有关此主题的更多信息。根据 W3C 最新的 HTML5 候选推荐,HTML5 FORM
element does not support values for the method
attribute other than GET or POST . FORM
element in HTML 4.01也是如此.
关于scala - scala 中的 RESTful http DELETE 方法(玩 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15078323/