为什么其余的HTTP动词没有被使用?

7
大多数情况下,网站主要只使用GETPOST进行所有操作,但还有七个更多的动词。它们在早期使用过,但现在不太常用吗?
或者是因为一些浏览器不认识其他动词?如果是这样,为什么浏览器供应商选择实现协议的一半? [更新] 我找到了这篇文章,它对情况进行了很好的总结:为什么REST失败了

RESTful网络服务使用许多动词,很多服务器端软件也是如此。虽然对于许多“传统”网页来说,GET和POST已经足够了... - Michael
实际上,有超过七个以上的动词。请参见 http://tools.ietf.org/html/draft-ietf-httpbis-method-registrations-05。 - Julian Reschke
1
你提到的文章关注于浏览器中的REST——对于B2B/服务器之间的使用仍然非常活跃和有效。 - Michael
1
@Mikaveli:除此之外,这是一篇旧文章。近年来,REST服务变得越来越流行。 - Evert
3个回答

9
HTML规范是一个罪魁祸首,只允许使用GET、POST和HEAD。虽然它们经常被使用,但在浏览器中的直接使用并不多见。其他CRUD动词如PUT和DELETE最常见的用法是在REST服务和WebDAV中。你会发现OPTIONS在未来更加普遍,因为它被CORS规范(跨域XMLHttpRequest)所使用。TRACE在几乎所有地方都被禁用,因为它存在很大的安全风险。CONNECT被代理服务器广泛使用。PATCH是全新的,虽然我觉得奇怪他们决定将其添加到列表中(但是没有PROPFIND、MKCOL、ACL、LOCK等),但我认为我们将在未来看到它在RESTful服务中的更多应用。补充说明:最初的浏览器同时使用GET和PUT(后者用于更新网页)。之后的浏览器基本上都是只读的,直到表单和POST请求进入规范为止。

在HTML的上下文中,除了GET和POST之外,并没有提到其他方法。这并不是说不能使用其他方法,但也没有提供执行其他请求的手段。此外,XMLHTTPRequest对象可以执行除GET/POST之外的其他方法还非常新颖。 - Evert
我认为他指的是常见的HTML表单方法。http://www.w3.org/TR/html401/interact/forms.html#adef-method - Michael
因此,尽管它并不阻止这种情况,但浏览器(或HTML或JavaScript)并没有提供其他请求的手段。在HTML表单中使用method="PUT"或method="DELETE"会很好。 - Evert
@Evert:抱歉,我读成了“HTTP规范”。不知怎么的,在我的评论中还是写成了“HTML”。典型的思维漏洞。 - Joachim Sauer
@Evert:当你说“虽然我觉得他们决定将其添加到列表中有点奇怪(但没有PROPFIND、MKCOL、ACL、LOCK等),但我认为我们将在未来看到它在RESTful服务中更多地出现。”时,你是什么意思?PATCH与(大多数)WebDAV方法具有完全相同的状态——建议标准。 - Julian Reschke
显示剩余4条评论

1

大多数仍在使用,尽管不像GET或POST那样广泛。例如,RESTful Web服务使用PUT和DELETE以及GET和POST:

RESTful Web Service - Wiki Article

HEAD对于服务器调试HTTP标头非常有用,但由于它不返回响应正文,对于浏览器/普通网站访问者来说并没有太大用处...

像TRACE这样的其他动词并不像那么广泛,因为存在潜在的安全问题等。在维基百科文章中简要提到:

HTTP Protocol Methods - Wiki Article


0
十年后,这些其他动词在RESTful API中已经被广泛使用,几乎支持了所有当今普及的SPA应用程序和许多移动应用程序。
尽管如此,随着GraphQL的出现和对函数式编程风格日益增长的兴趣,对REST作为API结构的兴趣开始减弱,因为RPC-style API结构符合函数式编程的优势。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接