10

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

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

4

2 回答 2

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 中存在问题的边缘案例。CONNECT 和 TRACE 和 SEARCH 对于 IE 来说是有问题的。请记住,这是在 2007 年写的,所以 YMMV。

我认为对不支持 GET 和 POST 以外的浏览器的整个混淆源于 HTML 规范在HTML元素中列出这两个的事实:<form>

FORM 元素的方法属性指定用于将表单发送到处理代理的 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)。

编辑当然,这个问题已经被问过了,但两年前的答案仍然有效。

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

于 2010-07-14T23:14:49.537 回答
-1

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

于 2010-07-10T11:42:46.440 回答