我在这里看到了一些问题,比如如何调试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成功完成,请求以正确的方法显示在服务器日志中。我是否忽略了某些方面,比如跨浏览器兼容性或不明显的限制?


当前回答

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

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

其他回答

_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

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调用)。

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支持它们。