为什么不能在HTTP GET请求上修改数据?

我知道使用非GET方法(POST,PUT,DELETE)来修改服务器数据是正确的做法。 我可以find多个声称GET请求不应该改变服务器资源的资源。

然而,如果一个客户今天想到我这里说“我不在乎正确的做事方式是什么,如果我们可以使用调用URL并获得一些XML,那么使用您的API更容易 – 我们不希望build立HTTP请求和POST / PUT XML,“我可以用什么商业原因来说服他们呢?

有caching的影响? 安全问题? 我所寻求的不仅仅是“语义上没有意义”或者“它使事情变得模糊”。

编辑:

感谢迄今为止有关预取的答案。 我不关心预取,因为大部分都是围绕内部networkingAPI使用,而不是可访问的HTML页面,这些页面可能会有一个可以被浏览器预取的链接。

  • 预取:很多网页浏览器都会使用预取。 这意味着它会在你点击链接之前加载一个页面。 预计您稍后将点击该链接。
  • 机器人:有几个机器人扫描和索引互联网的信息。 他们只会发出GET请求。 由于这个原因你不想从GET请求中删除某些东西。
  • caching: GET HTTP请求不应该改变状态,它们应该是幂等的。 幂等意味着一次发出一个请求,或多次发出一个请求给出相同的结果。 即没有副作用。 由于这个原因,GET HTTP请求与caching紧密相关。
  • HTTP标准是这样说的 :HTTP标准说明了每个HTTP方法的用途。 有几个程序是为了使用HTTP标准而build立的,他们认为你会按照你应该的方式来使用它。 所以如果你不遵循的话,你会有一些随机程序中的未定义的行为。

那么Google如何find该网页的链接以及URL中的所有GET参数,并随时重新访问? 这可能会导致灾难。

每日跆拳道有一个关于这个有趣的文章 。

GET可以强制在用户上并导致跨站点请求伪造(CSRF)。 例如,如果您在http://example.com/logout.php上有一个注销function,这会改变用户的服务器状态,恶意的人可以在任何使用上述URL作为源的站点上放置一个图像标签:; http : //example.com/logout.php 。 加载此代码将导致用户注销。 在这个例子中没有什么大不了的,但是如果这是一个将资金转出账户的命令,这将是一件大事。

很好的理由去做正确的方法

它们是行业标准,有据可查,易于保护。 虽然您完全支持为客户尽可能简化生活,但您不希望在短期内实施更容易的事情,而不是那些对他们来说不那么容易,但提供长期利益的事情。

我最喜欢的报价之一

快速和肮脏…很久以后,快速离开了肮脏的遗体。

对你来说这是一个“一针九时”节目)

一个安全。 如果networking爬虫遇到了删除链接,或者用户被诱骗点击超链接,会发生什么? 用户在实际使用之前应该知道自己在做什么。

安全性: GET请求中的CSRF非常容易。

使用POST 不会保护你,但GET可以通过使用论坛和接受图像标签的地方来更容易的利用和大量的利用。

根据您在服务器端使用GET所做的事情,可以帮助攻击者启动DoS(拒绝服务) 。 攻击者可以通过图片标签向成千上万的网站发送垃圾信息,而且这些网站的每个访问者都会对您的网页服务器执行这个昂贵的GET请求。 这会给你带来很多的CPU周期。

我知道,无论如何,一些页面是沉重的,这总是一个风险,但是如果您在每个GET请求中添加10条大logging,风险就会更大。

我所寻求的不仅仅是“语义上没有意义”或者“它使事情变得模糊”。

我不在乎什么是正确的做法,对我们来说更容易

告诉他们想想他们曾经使用过的最差的API。 他们难道不能想象这是如何被快速破解所造成的吗?

如果从语义上有意义的事情开始,2个月内会更容易(也更便宜)。 我们把它称为“正确的方式”,因为它让事情变得简单,不是因为我们想折磨你。