关于http:大多数网络浏览器都提供PUT,DELETE,HEAD等方法吗?

Are the PUT, DELETE, HEAD, etc methods available in most web browsers?

我在这里看到了几个问题,例如如何调试RESTful服务,其中提到:

Unfortunately that same browser won't allow me to test HTTP PUT, DELETE, and to a certain degree even HTTP POST.

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

  • http://www.packetizer.com/ws/rest.html
  • http://www.mail-archive.com/[email protected]/msg13518.html
  • http://www.xml.com/cs/user/view/cs_msg/1098

但是,Firefox中的一些快速测试显示发送PUTDELETE请求按预期工作 - 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隧道其他方法,该字段由服务器读取并相应地分派请求。

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

这可以通过HTML创建帮助器方法在框架中自动完成(例如Rails form_tag)

  • 将实际的表单方法修复为POST(

    )

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

  • 不可能的原因/历史:https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms


    我相信这些评论专门针对浏览器,即点击链接和提交表单,而不是XMLHttpRequestXMLHttpRequest只是您在JavaScript中使用浏览器作为运行时编写的自定义客户端。

    更新:澄清一下,我并不是说(虽然我写了)你写的是XMLHttpRequest;我的意思是你编写了使用XMLHttpRequest的代码。浏览器本身不支持XMLHttpRequestXMLHttpRequest来自JavaScript运行时,可以由浏览器托管,但不需要(请参阅Rhino)。这就是人们说浏览器不支持PUTDELETE的原因 - 因为它实际上是支持它们的JavaScript。


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

    要符合XMLHttpRequest Level 2,浏览器必须支持这些方法。要检查哪些浏览器支持XMLHttpRequest Level 2,我建议使用CanIUse:

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

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


    只是添加 - Safari 2及更早版本肯定不支持PUT和DELETE。我得到的印象是3,但我不再需要它来测试了。 Safari 4肯定支持PUT和DELETE。