PUT 和 DELETE 应该在表单中使用吗?

问题描述 投票:0回答:6

假设我的 Web 应用程序在服务器端完全支持 PUT 和 DELETE,我应该使用它们吗?

基本上我的问题是有多少浏览器支持这个:

<form method="PUT">

<form method="DELETE">

除了符合 REST 标准之外,使用这两种 HTTP 方法还有什么好处吗? (假设这两种方法的替代是常用的POST)

html http rest cross-browser
6个回答
107
投票

您的问题涉及两个密切相关但又独立的标准:HTTP 和 HTML。 PUT 和 DELETE 方法是 HTTP 的一部分。在 HTTP 中,它们在 RESTful 接口以及基于 HTTP 构建的其他服务(例如 Webdav)中具有明显的用途。

HTML 版本 4 之前仅定义了表单的 POST 和 GET 的使用。 HTML5 此时似乎可以支持更多方法。 [注意,当前的 w3 草案中不包含支持]

任何当前的浏览器支持(我不直接知道)都将非常有限,并且仅作为前沿实验真正有用。


32
投票

GET、POST、PUT 和 DELETE(还有其他)是 HTTP 标准的一部分,但目前您仅限于 HTML 表单中的 GET 和 POST。

正如 Andrew 提到的,您可以在 AJAX 请求中使用 PUT 和 DELETE;但是,这仅适用于某些浏览器(请参阅 http://api.jquery.com/jQuery.ajax/)。


21
投票

不,

GET
POST
method
属性唯一有效的 HTTP 方法值。请参阅 HTML 规范 了解更多信息。

相信你可以在 AJAX 请求中使用它们。


12
投票

截至 2023 年 2 月,最新的 HTML 规范和草案默认情况下仍然不支持 GET 和 POST 以外的方法。如果您不使用方法中间件,那么您将不得不使用这两个选项。 (method 属性也可以将“dialog”作为值,但它是无关紧要的,因为它与 HTTP 方法不直接相关。)

https://html.spec.whatwg.org/multipage/form-control-infrastruct.html#attr-fs-method


0
投票

实际上不可能使用

<form />
发送 DELETE 请求,但您可以将一个请求发送到一个 API 端点并将用户重定向到另一页面。这将模拟所需的行为。提供了 jQuery 代码。

$(".control-action").on("click", () => {
  alert("Click");

  $.ajax({
    // call a DELETE endpoint of API
    url: "/api/items/5",
    method: "DELETE",
    headers: {
      "X-Api-Key": "363463822036d927c733d5607af109e2"
    },
    success : function () {
      // redirect to another page
      // window.location.href = "/items";
    }
  });
});
.link {
  text-decoration: underline;
  cursor: pointer;
  color: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>

<span class="link control-action">Call action</span>


0
投票

其他人已经解释得很好,但你可以访问 Github 上的这个answer以获取更多解释

可能不会,因为这会使

<form>
的处理模型变得相当复杂。特别是,今天的同源策略例外
<form>
不允许使用这些方法。我们要么必须在跨域请求中禁止它们,要么以某种方式要求 CORS。这两项限制对于导航来说都是首次,并且相当危险。

© www.soinside.com 2019 - 2024. All rights reserved.