Fine Grained rest HTTP动词浏览器支持

Dan*_*iro 10 rest http cross-browser http-method

是否有关于浏览器如何实际支持其余http动词(尤其是PUT,DELETE)的数据.这个问题主要是由于许多来源(例如这个stackoverflow答案)告知大多数浏览器不支持PUT和DELETE但不说哪个.

Rails使用客户端上的补丁解决了这个问题,并在服务器上反转补丁,但我想知道,例如,哪些浏览器不需要这样的黑客攻击.

mog*_*sie 5

如有疑问,请问安妮:

http://annevankesteren.nl/2007/10/http-method-support

它已经有几年的历史了,但它为PUT和DELETE提供了一个清晰的健康状况,但它也尝试了更多模糊动词的不同情况,如TRACE和PROPFIND:

Van Kesteren测试了Firefox 3,Opera 9.5和Internet Explorer 7,它们是预发布和发布的混合体.GET和POST按预期工作,并且都支持RFC 2616的标准http方法集.有一些套管问题,所以你应该总是坚持使用大写字母; TRACE和OPTIONS分别是Firefox和Opera中存在问题的边缘情况.对于IE,CONNECT和TRACE和SEARCH是有问题的.请记住,这是在2007年写的YMMV.

我认为除了GET和POST之外不支持浏览器的整个混乱源于HTML规范在HTML 元素列出这两个:<form>

FORM元素的method属性指定用于将表单发送到处理代理程序的HTTP方法.此属性可能包含两个值:

  • get:使用HTTP"get"方法,将表单数据集附加到action属性指定的URI(带有问号("?")作为分隔符),并将此新URI发送到处理代理程序.

  • post:使用HTTP"post"方法,表单数据集包含在表单主体中并发送给处理代理程序.

这就是浏览器仅在HTML中支持GET和POST的原因; 因为标准是这么说的.

目前(2014年1月)的XMLHttpRequest规范,另一方面国家明确表示,请求方法应通过与一些例外(CONNECT,TRACE或TRACK)被允许,并且RFC2616方法应该大写的:

\ 6.如果方法是用于CONNECT不区分大小写匹配,DELETE,GET,HEAD,OPTIONS,POST,PUT,TRACE,或TRACK,取值范围为0x61(ASCII a)至0x7A(ASCII Z)从每个字节减去为0x20.

如果它与上述任何一个都不匹配,则按字面顺序传递,包括在最终请求中.

编辑已经到了或多或少相同的结论的另一个来源:也就是说XMLHttpRequest的支持PUT和DELETE: http://jshirley.vox.com/library/post/xmlhttprequest-and-rest.html(警告,断开链接截至5月2014).

编辑当然,问题已被提出,但两年前的答案仍然有效.

编辑 2007年Anne van Kesteren的页面简历,并添加了关于HTML vs XMLHttpRequest的部分

  • 是的,它已经老了.但是,我想这是可悲的,我们拥有的最好的,没有众包的人进入http://www.mnot.net/javascript/xmlhttprequest/ (2认同)