PUT, DELETE, HEAD等方法在大多数网络浏览器中可用吗?

我在这里看到了一些问题,比如如何调试RESTful服务,其中提到:

不幸的是,同一浏览器不允许我测试HTTP PUT、DELETE,甚至在某种程度上也不允许我测试HTTP POST。

我也听说过浏览器只支持GET和POST,从其他一些来源,比如:

但是,Firefox中的一些快速测试表明,发送PUTDELETE请求按预期工作——XMLHttpRequest成功完成,请求以正确的方法显示在服务器日志中。我是否忽略了某些方面,比如跨浏览器兼容性或不明显的限制?

250341 次浏览

我相信这些注释是专门针对浏览器的,也就是说,点击链接和提交表单,而不是XMLHttpRequestXMLHttpRequest只是用JavaScript编写的自定义客户端,它使用浏览器作为运行时。

更新:澄清一下,我并不是说(尽管我确实写过)写了XMLHttpRequest;我的意思是您编写了使用XMLHttpRequest的代码。浏览器本身不支持XMLHttpRequestXMLHttpRequest来自JavaScript运行时,它可能由浏览器托管,尽管它不是必需的(参见犀牛)。这就是为什么人们说浏览器不支持PUT和# eyz5,因为实际上是JavaScript支持它们。

XMLHttpRequest是JavaScript对象模型中的标准对象。

根据维基百科的说法,XMLHttpRequest最初是作为一个ActiveX对象出现在Internet Explorer 5中,但后来成为了一个标准,并在Mozilla家族的1.0、Apple Safari 1.2、Opera 7.60-p1和IE 7.0中被包含在JavaScript中使用。

对象上的open()方法以HTTP方法作为参数-并指定为接受任何有效的HTTP方法(参见链接的第5项)-包括GETPOSTHEADPUTDELETE,如由RFC 2616指定

作为旁注IE 7-8只允许以下HTTP方法:&;get &;, &; post &;, &; head &;, &; put &;, &; delete &;, &; move &;, &; propfind &;, &; proppatch &;, &; mkcol &;, &; copy &;, &; lock &;, &;

不。HTML 5规范提到:

method和formmethod内容属性是枚举属性 使用以下关键字和状态:

关键字得到,映射到GET状态,表示HTTP GET 方法。GET方法应该只请求和检索数据和 应该没有其他效果了。< / p >

关键字帖子,映射到状态 POST,表示HTTP POST方法。POST方法请求这个 服务器接受要处理的提交表单的数据,这可能 结果在一个项目被添加到数据库,创建一个新的网页 页面资源,更新现有页面,或全部 提到的结果。< / p >

关键字对话框,映射到状态对话框,表明 提交表单的目的是关闭控件所在的对话框 表单发现自己(如果有的话),否则不提交。< / p >

这些属性的默认无效值是GET状态

也就是说,HTML表单只支持得到帖子作为HTTP请求方法。一种解决方法是使用隐藏的表单字段(由服务器读取并相应地分发请求)通过POST隧道其他方法。

然而,得到帖子删除 在所有主要的web浏览器(IE, Firefox, Safari, Chrome, Opera)中都支持XMLHttpRequest的实现(即AJAX调用)。

HTML表单支持GET和POST。(HTML5一度增加了PUT/DELETE功能,但后来这些功能被删除了。)

XMLHttpRequest支持包括CHICKEN在内的所有方法,尽管一些方法名是不区分大小写的(每个HTTP方法都是区分大小写的),而出于安全原因,一些方法名根本不支持(例如CONNECT)。

获取API还支持除CONNECT、TRACE和TRACK之外的任何方法,出于安全原因,这些方法都是被禁止的

浏览器正在慢慢地向XMLHttpRequest所指定的规则靠拢,但正如另一个评论所指出的那样,仍然存在一些差异。

只是补充一点——Safari 2和更早的版本肯定不支持PUT和DELETE。我的印象是3,但我再也没有它来测试了。Safari 4确实支持PUT和DELETE。

_method隐藏字段的解决方法

在Rails中使用,可以适应任何框架:

  • 添加一个隐藏的_method参数到任何不是GET或POST的表单:

    <input type="hidden" name="_method" value="DELETE">
    

    这可以在框架中通过HTML创建助手方法(例如Rails form_tag)

    自动完成
  • 修复实际的表单方法为POST (<form method="post")

  • 在服务器上处理_method,并完全像发送该方法一样,而不是实际的POST

为什么它是不可能的理由/历史:https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

是的, PUT, DELETE, HEAD等HTTP方法在所有现代浏览器中都可用。

为了兼容XMLHttpRequest级别2浏览器,必须支持这些方法。要检查哪些浏览器支持XMLHttpRequest Level 2,我建议CanIUse:

< a href = " http://caniuse.com/壮举= xhr2 " > = http://caniuse.com/壮举xhr2 < / >

只有Opera Mini缺乏支持atm (juli '15),但Opera Mini缺乏对一切的支持。:)