假设我的Web应用程序在服务器端完全支持PUT和DELETE,那么我应该利用它们吗?
基本上我的问题是有多少浏览器支持这个:
<form method="PUT">
或者<form method="DELETE">
除符合 REST 规范外,使用这两种 HTTP 方法还有其他好处吗?(假设这两种方法的替代方式是常用的 POST)
假设我的Web应用程序在服务器端完全支持PUT和DELETE,那么我应该利用它们吗?
基本上我的问题是有多少浏览器支持这个:
<form method="PUT">
或者<form method="DELETE">
除符合 REST 规范外,使用这两种 HTTP 方法还有其他好处吗?(假设这两种方法的替代方式是常用的 POST)
你的问题涉及两个紧密相关但彼此分离的标准,HTTP和HTML。PUT和DELETE方法是HTTP的一部分。在HTTP中,它们在RESTful接口以及其他构建在HTTP之上的服务(如Webdav)中具有明显的用途。
HTML在版本4之前仅为表单定义了POST和GET的用法。目前看来,HTML5可能会支持更多的方法。[注意,当前的w3草案中没有包括支持]
任何当前的浏览器支持(我并不直接知道)都非常有限,只能作为尝试最前沿技术的实验使用。
GET、POST、PUT和DELETE(还有其他方法)是HTTP标准的一部分,但在HTML表单中您目前只能使用GET和POST。
正如安德鲁所提到的,您可以在AJAX请求中使用PUT和DELETE,但这仅适用于某些浏览器(请参见http://api.jquery.com/jQuery.ajax/)。
不,GET
和POST
是method
属性的唯一有效HTTP方法值。有关更多信息,请参见HTML规范。
虽然我认为你可以在AJAX请求中使用它们。
https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fs-method
<form>
的处理模型产生相当大的复杂性。特别是,<form>
目前的同源策略例外并不允许使用这些方法。要么我们必须禁止在跨域请求中使用它们,要么以某种方式要求CORS。这两个限制对于导航来说都是首次出现的,而且风险相当大。使用<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>