大多数Web浏览器中都可以使用PUT,DELETE,HEAD等方法吗?
我在这里看到了几个问题,例如如何调试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中进行的一些快速测试表明,发送PUT
和DELETE
请求可以按预期的方式工作-XMLHttpRequest成功完成,并且该请求以正确的方法显示在服务器日志中。我是否缺少某些方面的信息,例如跨浏览器的兼容性或者非显而易见的限制?
解决方案
我认为这些评论专门针对浏览器,即单击链接并提交表单,而不是XMLHttpRequest。 XMLHttpRequest只是我们使用JavaScript编写的自定义客户端,它使用浏览器作为运行时。
更新:澄清一下,我并不是说(尽管我确实写过)我们写了XMLHttpRequest。我的意思是我们编写了使用XMLHttpRequest的代码。浏览器本身不支持XMLHttpRequest。 " XMLHttpRequest"来自JavaScript运行时,该运行时可以由浏览器托管,尽管不是必需的(请参见Rhino)。这就是为什么人们说浏览器不支持PUT
和DELETE
的原因,因为实际上是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),包括GET
,POST
,HEAD
和`按照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。