我在这里看到了一些问题,比如如何调试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 5规范中提到:

The method and formmethod content attributes are enumerated attributes with the following keywords and states: The keyword get, mapping to the state GET, indicating the HTTP GET method. The GET method should only request and retrieve data and should have no other effect. The keyword post, mapping to the state POST, indicating the HTTP POST method. The POST method requests that the server accept the submitted form's data to be processed, which may result in an item being added to a database, the creation of a new web page resource, the updating of the existing page, or all of the mentioned outcomes. The keyword dialog, mapping to the state dialog, indicating that submitting the form is intended to close the dialog box in which the form finds itself, if any, and otherwise not submit. The invalid value default for these attributes is the GET state

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

然而,GET, POST, PUT和DELETE在所有主要的web浏览器(IE, Firefox, Safari, Chrome, Opera)中都支持XMLHttpRequest的实现(即AJAX调用)。

其他回答

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

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

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

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

不。HTML 5规范中提到:

The method and formmethod content attributes are enumerated attributes with the following keywords and states: The keyword get, mapping to the state GET, indicating the HTTP GET method. The GET method should only request and retrieve data and should have no other effect. The keyword post, mapping to the state POST, indicating the HTTP POST method. The POST method requests that the server accept the submitted form's data to be processed, which may result in an item being added to a database, the creation of a new web page resource, the updating of the existing page, or all of the mentioned outcomes. The keyword dialog, mapping to the state dialog, indicating that submitting the form is intended to close the dialog box in which the form finds itself, if any, and otherwise not submit. The invalid value default for these attributes is the GET state

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

然而,GET, POST, PUT和DELETE在所有主要的web浏览器(IE, Firefox, Safari, Chrome, Opera)中都支持XMLHttpRequest的实现(即AJAX调用)。

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

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

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

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

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

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"。