Fine Grained rest HTTP动词浏览器支持

时间:2010-07-10 05:57:33

标签: http rest cross-browser http-method

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

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

2 个答案:

答案 0 :(得分:5)

如有疑问,ask Anne

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> element中仅列出 这两个事实:

  

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

     
      
  • get:使用HTTP“get”方法,将表单数据集附加到action属性指定的URI(带有问号(“?”)作为分隔符),并发送此新URI加工商。

  •   
  • post:使用HTTP“post”方法,表单数据集包含在表单正文中并发送给处理代理。

  •   

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

另一方面,当前(2014年1月)XMLHttpRequest specification明确指出应该允许请求方法有一些例外(CONNECT,TRACE或TRACK),并且RFC2616方法应该是大写的:

  

\ 6。如果method对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(截至2014年5月的警告,断开链接)。

编辑问题当然是asked before,但两年前的答案仍然有效。

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

答案 1 :(得分:-1)

请参阅Atom Wiki的PutDeleteSupport页面。您可能有兴趣浏览与HTTP相关的其他Atom Wiki页面。