当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么不应该在HTTPGET请求上修改数据?》经验,为你挑选了3个好方法。

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

但是,如果客户今天来找我并说"我不关心做正确的事情是什么,如果我们可以使用调用URL并获得一些XML,我们就更容易使用您的API - 我们不希望构建HTTP请求和POST/PUT XML," 我可以用什么商业利益的理由来说服他们呢?

是否有缓存含义?安全问题?我有点想要的不只是"它在语义上没有意义"或"它使事情变得模棱两可".

编辑:

感谢迄今为止关于预取的答案.我并不关心预取,因为主要是围绕内部网络API的使用,而不是可访问的HTML页面,这些页面可能有浏览器预取的链接.



1> Brian R. Bon..:

预取:很多Web浏览器都会使用预取.这意味着它会在您单击链接之前加载页面.预计您稍后会点击该链接.

机器人:有几个机器人扫描并索引互联网以获取信息.他们只会发出GET请求.出于这个原因,您不希望从GET请求中删除某些内容.

缓存: GET HTTP请求不应该改变状态,它们应该是幂等的.幂等意味着发出一次请求或多次发出请求会产生相同的结果.即没有副作用.因此,GET HTTP请求与缓存紧密相关.

HTTP标准如此说:HTTP标准说明了每种HTTP方法的用途.构建了几个程序来使用HTTP标准,并且它们假设您将按照预期的方式使用它.因此,如果您不遵循,您将从一系列随机程序中获得未定义的行为.


"GET HTTP请求不会改变状态而且它们是幂等的" - 这就是重点 - 它们本身并不是幂等的,它们预计会以这样的方式使用它们.

2> Tamas Czineg..:

Google如何使用URL中的所有GET参数查找指向该页面的链接,并不时地重新访问它?这可能会导致灾难.

The Daily WTF上有一篇有趣的文章.



3> 小智..:

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

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有