Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

要不要试试自定义 HTTP 方法?

  RESTful 的其中一个坑点就是 HTTP 方法不够用。很多行为根本不是 GET、PUT、POST、DELETE 等这些基本方法可以描述的。如果非要牵强地描述,也可能会产生一些奇怪的语义。比如「赞」和「取消赞」到底算什么行为?为何不试试自定义的 HTTP 方法呢?
  首先,HTTP 并没有限制对方法的扩展,自带的一组方法只是为其定义了语义而已。以下是 RFC2616#section-9 的片段: The set of common methods for HTTP/1.1 is defined below. Although
this set can be expanded, additional methods cannot be assumed to
share the same semantics for separately extended clients and servers.
  既然规范允许,那么实现允许么?这就有点坑了。低版本 IE 显然有坑,而且其坑还不仅仅是自定义 HTTP,它们连规范的 DELETE、PATCH 之类的方法都不支持。对于这种情况我们早就有了对策,那就是使用 X-HTTP-Method-Override。所以如果可以容忍 X-HTTP-Method-Override,那自定义 HTTP 方法一定也在可接受范围之内。更何况现代浏览器早就支持了自定义方法了,如果不考虑低版本 IE 的话在前端就不会有任何障碍。
  虽然前端无障碍,但是后端框架就未必支持。一个典型的例子就是目前最新的 Nginx 也不支持小写字母的方法名。连 Nginx 这么专业的 HTTP 服务器都有坑,更何况是传统的只懂 GET/POST 的一堆后端框架呢?
  其实我也只是说说自定义 HTTP 方法的可行性和坑而已,我自己可能并不会这么用。因为我不推荐在原生上做奇怪的扩展。但如果扩展 HTTP 方法可以解决项目中的重大问题的话可以试试,如果只是为了装逼还是好好的用规范中提供的方法吧。
网名:
54.211.148.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^