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

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

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

http://www.packetizer.com/ws/rest.html http://www.mail-archive.com/jmeter-user@jakarta.apache.org/msg13518.html http://www.xml.com/cs/user/view/cs_msg/1098

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


当前回答

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

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

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

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

其他回答

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项)-包括GET, POST, HEAD, PUT和DELETE,如RFC 2616所指定的。

附注IE 7-8只允许以下HTTP方法:"GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "LOCK", "UNLOCK",和"OPTIONS"。

我相信这些注释具体指的是浏览器,即点击链接和提交表单,而不是XMLHttpRequest。XMLHttpRequest只是一个用JavaScript编写的自定义客户端,它使用浏览器作为运行时。

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

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

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

http://caniuse.com/#feat=xhr2

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

_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

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

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

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

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