首页 文章

大多数Web浏览器中是否提供PUT,DELETE,HEAD等方法?

提问于
浏览
579

我在这里看到了几个问题,如How to debug RESTful services,其中提到:

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

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

但是,Firefox中的一些快速测试显示发送 PUTDELETE 请求按预期工作 - XMLHttpRequest 成功完成,并且请求以正确的方法显示在服务器日志中 . 我是否缺少某些方面,例如跨浏览器兼容性或非显而易见的限制?

7 回答

  • 75

    HTML表单(最高为HTML版本4和XHTML 1)仅支持 GETPOST 作为HTTP请求方法 . 解决方法是使用隐藏的表单字段通过POST隧道传输其他方法,该字段由服务器读取并相应地分派请求 .

    但是,在所有主要的Web浏览器(IE,Firefox,Safari,Chrome,Opera)中,XMLHttpRequest(即AJAX调用)的实现都支持 GETPOSTPUTDELETE .

  • 7

    HTML表单支持GET和POST . (HTML5在某一点添加了PUT / DELETE,但那些被删除了 . )

    XMLHttpRequest支持每个方法,包括CHICKEN,尽管某些方法名称不区分大小写(方法对每个HTTP区分大小写),并且出于安全原因(例如CONNECT)根本不支持某些方法名称 .

    浏览器正在慢慢收敛于XMLHttpRequest指定的规则,但正如另一条评论指出的那样,仍然存在一些差异 .

  • 40

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

    根据维基百科,XMLHttpRequest首次出现在Internet Explorer 5中作为ActiveX对象,但自那时起已被制作成标准,并且自1.0,Apple Safari 1.2,Opera 7.60-p1和IE以来已被包含在Mozilla家族的JavaScript中使用7.0 .

    对象上的The open() method将HTTP方法作为参数 - 并指定为采用任何有效的HTTP方法(请参阅链接的项目编号5) - 包括 GETPOSTHEADPUTDELETE ,如specified by RFC 2616 .

    作为旁注IE 7–8 only permit the following HTTP methods: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY", "LOCK", "UNLOCK", and "OPTIONS" .

  • 8

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

    更新:澄清一下,我并不是说(虽然我写了)你写的是 XMLHttpRequest ;我的意思是你编写了使用 XMLHttpRequest 的代码 . 浏览器本身不支持 XMLHttpRequest . XMLHttpRequest 来自JavaScript运行时,它可能由浏览器托管,但不是必须的(参见Rhino) . 那个's why people say browsers don' t支持 PUTDELETE - 因为它实际上是支持它们的JavaScript .

  • 440

    _method hidden field workaround

    在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

  • 15

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

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

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

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

  • 13

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

相关问题