scala - scala 中的 RESTful http DELETE 方法(玩 2.0)

我正在使用 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也是如此.

https://stackoverflow.com/questions/15078323/

相关文章:

twitter-bootstrap - Bootstrap 4 导航栏,带有品牌中心和左侧、中心和右

perl - Docker [for mac] 文件系统变为只读,这几乎破坏了 docker 的所有

assembly - ARM v8 中的 LDUR 和 STUR

apache - 使用 ApacheDS 创建新的架构 LDAP

vuejs2 - 如何在 v-radio 标签中设置 HTML

c# - 如何在 C# 中创建嵌套(父子)JSON 响应?

jenkins - 本地 Jenkins 服务器没有 slave.jar 或 slave-agent

xcode - 如何禁用 Xcode 4 控制台换行?

r - ggplot2 以错误的顺序放置数据标签(geom_text)

https - 从 self 管理的 Let's Encrypt 到 AWS Certificate