为什么浏览器不支持 PUT 和 DELETE 请求?何时支持?

2024-04-03

我最近看到许多框架决定在表单提交(而不是ajax)中“伪造”PUT 和 DELETE 请求。就像 Ruby on Rails 一样。他们似乎在等待浏览器迎头赶上。他们的等待是徒劳的吗?

这是否会在任何地方实施?


Browsers支持PUT and DELETE,但它是HTML事实并非如此。

例如,浏览器将启动PUT通过 Javascript (AJAX) 请求,但不通过 HTML<form>提交。

这是因为 HTML 4.01 和最终的 W3C HTML 5.0 规范都规定,它们的唯一 HTTP 方法form允许的元素是 GET 和 POST。

在 HTML 5 的开发过程中对此进行了很多讨论,并且一度将它们添加到 HTML 5 中,但又被删除。从 HTML 5 规范中删除附加方法的原因是 HTML 4 级别的浏览器永远无法支持它们(在它们创建时不是 HTML 的一部分);如果没有 JavaScript shim,他们就无法做到这一点;因此,您不妨使用 AJAX。

尝试使用表单的网页method="PUT" or method="DELETE" would 回退到默认方法,GET适用于所有当前浏览器。这会破坏 Web 应用程序在 HTML 表单中使用适当方法来执行预期操作的尝试,并最终给出更糟糕的结果 —GET被用来删除东西! (你好爬虫。哦,哎呀!我的数据库消失了)

更改 HTML 的默认方法<form>元素到POST会有所帮助(国际海事组织默认应该一直是POST,自从 Moasic* 于 1993 年首次推出表单以来),但要更改默认值至少需要十年时间才能渗透到安装基础中。简而言之,就是两个词:“因为遗产”。 :-(

To support current browsers, authors will have to fake it with an override. I recommend authors use the widely knowna http://symfony.com/doc/current/cookbook/routing/method_parameters.html#faking-the-method-with-method, b https://github.com/expressjs/method-override#override-using-a-query-value _method argument by including <input type=hidden name=_method value=DELETE> in their HTML; switch the form method to POST (since the request is unsafe); then add recognition of _method on the server side, which should then do whatever's necessary to mutate the request and forward it on as if it were a real DELETE request.

另请注意,由于网络浏览器是最终的HATEOAS https://en.wikipedia.org/wiki/HATEOAS客户,他们需要有一个新状态传输给他们以进行 DELETE 请求。现有的 API 经常返回204 No Content对于此类请求。您应该发回带有链接的超媒体响应,以便用户可以继续浏览器状态。

另请参阅这些相似/相同问题的答案:

  • 为什么 HTML 表单上没有 PUT 和 DELETE 方法? https://softwareengineering.stackexchange.com/questions/114156/why-are-there-are-no-put-and-delete-methods-on-html-forms
  • PUT、DELETE、HEAD 等方法在大多数 Web 浏览器中都可用吗? https://stackoverflow.com/questions/165779/are-the-put-delete-head-etc-methods-available-in-most-web-browsers
  • 在 HTML 表单中使用 PUT 方法 https://stackoverflow.com/questions/8054165/using-put-method-in-html-form
  • 浏览器是否支持带有多部分/表单数据的 PUT 请求 https://stackoverflow.com/questions/23748551/do-browsers-support-put-requests-with-multipart-form-data

* Mosaic, created by Marc Andreessen, also introduced the compound mistake of the <img src=…> tag — it should have been <image source=…>fallback</image>.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么浏览器不支持 PUT 和 DELETE 请求?何时支持? 的相关文章

  • Django Rest Framework如何禁止用户更改用户名?

    我正在创造UserSerializer并希望允许用户创建新帐户但禁止他们更改用户名 有一个read only我可以应用该属性 但用户在创建新用户名时将无法设置用户名 但如果没有它 它允许我改变它 还有一个required不幸的是 该属性不能
  • WordPress REST API - 允许任何人发帖

    我正在 WordPress 上构建一个应用程序 它需要一个简单的前端表单 任何人都可以提交需要保存在数据库中的信息 我正在尝试通过 REST API 来处理这个问题 由于应用程序的性质 提交此信息时不能进行任何页面重定向 我可以毫无问题地设
  • Codeigniter:使用 RESTful 服务

    是否有一个易于设置的 Codeigniter REST 库 我可以用它来使用 RESTful 服务 我尝试设置this https github com philsturgeon codeigniter restclient图书馆 但无法设
  • 目前推荐使用 Web API 执行部分更新的方法是什么?

    我想知道如何使用 ASP NET Web API 的 RESTful 接口实现部分更新 举例来说 我们通过以下结构的线路传递对象 public class Person public int Id get set public string
  • Rest API 和 Restful Web 服务之间的区别

    我是网络服务新手 有人可以帮助我理解 REST API 和 java 中的 Restful Web 服务之间的区别吗 我开发了一个仅基于 servlet 和 jsp 的 Web 应用程序 现在必须使用 REST API 开发相同的应用程序
  • RESTful服务中的资源级授权

    Let users id 是 RESTful 服务中的资源 url 启用基本身份验证 仅允许经过身份验证的用户访问该 url 示例场景 User 1 User 2是通过 userId 1 和 2 进行身份验证的用户 由于两者都经过身份验证
  • RESTful 应用程序中的 XSRF

    我是一名 ASP NET 开发人员 正在尝试学习 Rails 和 RESTful 方法 为了理解这一点 我计划编写一个电子邮件客户端 它会对服务器进行 RESTful GET 调用以获取电子邮件 并通过 POST 调用来发送电子邮件 要遵循
  • REST 何时/如何取代 SOAP [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前正在写关于 IT 技术等的论文
  • 在同一 URL 上运行 SOAP 和 RESTful

    假设我们有一个响应主机标头 kebab shop intra net 的网站 此 URL 中是否可以同时包含 SOAP 和 RESTful 也就是说 这两者都是在已部署的代码中处理的 kebab shop intra net takeawa
  • 基于查询参数的WCF REST服务url路由

    由于 WCF 路由不支持 REST 服务的路由 因此我创建了一项 REST 服务 该服务具有一个端点 该端点接受所有传入请求 并根据查询参数重定向这些请求 我按照这篇文章做到了这一点http blog tonysneed com 2012
  • 使用纯 CodeIgniter 创建 RESTful API?

    我需要仅使用 CodeIgniter 创建 RESTful Web api 我无法使用任何第三方插件或库来执行此操作 我看到大多数人都在使用https github com chriskacerguis codeigniter restse
  • RESTful API 设计:更新 (PUT) 中不可更改的数据是否应该是可选的?

    我正在实现 RESTful API 并且我不确定对于无法更改的数据的存在是否存在 社区接受 行为 例如 在我的 API 中 有一个 文件 资源 该资源在创建时包含许多在创建后无法修改的字段 例如文件的二进制数据以及与其关联的一些元数据 此外
  • 如何使用 System.Web.Http.OData.Delta 修补枚举?

    尝试利用System Web Http OData Delta http blogs msdn com b alexj archive 2012 08 15 odata support in asp net web api aspx实施PA
  • 休息。球衣。如何以编程方式选择返回类型:JSON 或 XML?

    我有两个问题 1 我可以创建吗one类 使用 JAXB 注释对其进行注释 用于 XML 支持 并在中声明web xml
  • MVC 的设计是 RESTful 的吗

    MVC 必须是 RESTful 的吗 有没有办法制作一个SOAP服务使用MVC图案 输入请求实际上会进入View首先然后进入Controller那么Model eg Request gt View gt Controller gt Mode
  • Jersey 2 - ContainerRequestFilter get 方法注解

    我试图获取 ContainerRequestFilter 对象中的方法注释 控制器 GET RolesAllowed ADMIN public String message return Hello rest12 容器请求过滤器 Provi
  • 针对 REST API 的授权会引发错误:401(未找到请求的凭据。)

    我想针对 HP Alm Rest API 进行授权 我认为这 应该 有效 但事实并非如此 function performSignIn let headers new Headers headers append Content Type
  • Jersey REST/ JAXB 错误,映射接口

    我必须使用 REST Web 服务中的接口 这是接口 Specs java XmlJavaTypeAdapter MyAdapter class public interface Specs public BaseProperties ge
  • Magento Rest API - oAuth 错误

    我是第一次使用 Magento Rest API 我浏览了 Rest API 的教程http www magentocommerce com api rest并尝试了一个通过 API 获取产品的示例 callbackUrl http loc
  • OpenRasta - Scott Littlewoods 基本身份验证工作示例

    我正在测试使用 OpenRasta 作为 ASP NET MVC 的可行替代方案的可行性 但是 我遇到了有关身份验证的绊脚石 让我明确一点 开放式摘要身份验证 不是一个选项在此刻 我读到 Scott Littlewood 为 OpenRas

随机推荐