PUT,DELETE,HEAD等方法在大多数Web浏览器中都可用?
我在这里看到了一些问题,比如如何debuggingREST风格的服务 ,其中提到:
不幸的是,相同的浏览器将不允许我testingHTTP 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中的一些快速testing显示,发送PUT
和DELETE
请求的方式正常 – XMLHttpRequest
成功完成,请求以正确的方式显示在服务器日志中。 有没有这方面的一些方面,我缺less,如跨浏览器兼容性或非明显的限制?
HTML表单(直到HTML版本4和XHTML 1)仅支持GET和POST作为HTTP请求方法。 解决方法是通过使用由服务器读取的隐藏表单字段通过POST来引导其他方法,并相应地分派请求。
但是,在所有主要的Web浏览器(IE,Firefox,Safari,Chrome,Opera)中,XMLHttpRequest(即AJAX调用)的实现都支持GET , POST , PUT和DELETE 。
HTML表单支持GET和POST。 (HTML5在一点上添加了PUT / DELETE,但是这些被删除了。)
XMLHttpRequest支持包括CHICKEN在内的所有方法,尽pipe某些方法名称是不区分大小写的(方法对每个HTTP区分大小写),而且出于安全原因(例如CONNECT)根本不支持某些方法名称。
浏览器正慢慢聚合在XMLHttpRequest指定的规则上,但正如其他评论所指出的那样,仍然存在一些差异。
XMLHttpRequest
是JavaScript Object模型中的标准对象。
根据维基百科的说法, XMLHttpRequest
首先作为一个ActiveX对象出现在Internet Explorer 5中,但自此以后,它就成为一个标准,从1.0,Mozilla家族,Apple Safari 1.2,Opera 8.0和IE 7.0开始被包含在Mozilla家族的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, ,“复制”,“locking”,“解锁”和“选项” 。
我相信这些评论特指浏览器,即点击链接和提交表单,而不是XMLHttpRequest
。 XMLHttpRequest
只是您在JavaScript中使用浏览器作为运行时编写的自定义客户端。
更新:澄清,我不是说(虽然我写了), 你写了XMLHttpRequest
; 我的意思是你写了使用XMLHttpRequest
的代码。 浏览器本身不支持XMLHttpRequest
。 XMLHttpRequest
来自JavaScript运行时,可能由浏览器托pipe,尽pipe不需要(参见Rhino )。 这就是为什么人们说浏览器不支持PUT
和DELETE
因为它实际上是支持它们的JavaScript。
_方法隐藏域解决方法
在Rails中使用,可以适应任何框架:
-
添加一个隐藏
_method
参数的任何forms不是GET或POST:<input type="hidden" name="_method" value="DELETE">
这可以通过HTML创build帮助器方法在框架中自动完成(例如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
只是添加 – Safari 2和更早版本肯定不支持PUT和DELETE。 我得到了3的印象,但我没有testing了。 Safari 4绝对支持PUT和DELETE。
YES ,PUT,DELETE,HEAD等HTTP方法适用于所有现代浏览器。
为了符合XMLHttpRequest Level 2浏览器必须支持这些方法。 要检查哪些浏览器支持XMLHttpRequest Level 2,我build议使用CanIUse:
只有Opera Mini缺乏支持atm(juli'15),但Opera Mini缺乏对所有东西的支持。 🙂