大多数Web浏览器中都可以使用PUT,DELETE,HEAD等方法吗?

时间:2020-03-06 15:03:45  来源:igfitidea点击:

我在这里看到了几个问题,例如如何调试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成功完成,并且该请求以正确的方法显示在服务器日志中。我是否缺少某些方面的信息,例如跨浏览器的兼容性或者非显而易见的限制?

解决方案

我认为这些评论专门针对浏览器,即单击链接并提交表单,而不是XMLHttpRequest。 XMLHttpRequest只是我们使用JavaScript编写的自定义客户端,它使用浏览器作为运行时。

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

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

根据Wikipedia所述,XMLHttpRequest最初作为ActiveX对象出现在Internet Explorer 5中,但此后已成为标准,自1.0版,Apple Safari 1.2,Opera 7.60-p1,和IE 7.0。

对象上的open()方法将HTTP方法作为参数,并被指定为采用任何有效的HTTP方法(请参阅链接的项目编号5),包括GETPOSTHEAD和`按照RFC 2616的规定放置和删除。

附带说明,IE 78仅允许以下HTTP方法:" GET"," POST"," HEAD"," PUT"," DELETE"," MOVE"," PROPFIND"," PROPPATCH"," MKCOL"," COPY"," LOCK"," UNLOCK"和" OPTIONS"。

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

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

HTML表单支持GET和POST。 (HTML5在某一时刻添加了PUT / DELETE,但已将其删除。)

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

浏览器正在慢慢收敛于XMLHttpRequest指定的规则,但是正如其他注释所指出的那样,仍然存在一些差异。

仅添加Safari 2和更早版本肯定不支持PUT和DELETE。我得到3的印象,但是我再也没有要测试的印象了。 Safari 4确实支持PUT和DELETE。