我知道使用非GET方法(POST,PUT,DELETE)来修改服务器数据是正确的做事方式.我可以找到多个资源声称GET请求不应该更改服务器上的资源.
但是,如果客户今天来找我并说"我不关心做正确的事情是什么,如果我们可以使用调用URL并获得一些XML,我们就更容易使用您的API - 我们不希望构建HTTP请求和POST/PUT XML," 我可以用什么商业利益的理由来说服他们呢?
是否有缓存含义?安全问题?我有点想要的不只是"它在语义上没有意义"或"它使事情变得模棱两可".
编辑:
感谢迄今为止关于预取的答案.我并不关心预取,因为主要是围绕内部网络API的使用,而不是可访问的HTML页面,这些页面可能有浏览器预取的链接.
预取:很多Web浏览器都会使用预取.这意味着它会在您单击链接之前加载页面.预计您稍后会点击该链接.
机器人:有几个机器人扫描并索引互联网以获取信息.他们只会发出GET请求.出于这个原因,您不希望从GET请求中删除某些内容.
缓存: GET HTTP请求不应该改变状态,它们应该是幂等的.幂等意味着发出一次请求或多次发出请求会产生相同的结果.即没有副作用.因此,GET HTTP请求与缓存紧密相关.
HTTP标准如此说:HTTP标准说明了每种HTTP方法的用途.构建了几个程序来使用HTTP标准,并且它们假设您将按照预期的方式使用它.因此,如果您不遵循,您将从一系列随机程序中获得未定义的行为.
Google如何使用URL中的所有GET参数查找指向该页面的链接,并不时地重新访问它?这可能会导致灾难.
The Daily WTF上有一篇有趣的文章.
可以强制GET用户并导致跨站点请求伪造(CSRF).例如,如果您在http://example.com/logout.php上有注销功能,这会更改用户的服务器状态,则恶意用户可以在使用上述URL作为其来源的任何网站上放置图片代码:http://example.com/logout.php.加载此代码会导致用户退出.在给出的例子中没什么大不了的,但如果这是一个从账户转出资金的命令,那将是一件大事.