为什么要禁止get方法调用?这几种常见场景必须了解!

吉云

说起这个“禁止GET方法调用”,真是让我前段时间折腾好一阵子。本来觉得挺简单个事儿,结果搞得挺郁闷。

是这么个情况,我当时在对接一个内部的系统接口,想去捞点配置数据。按常理嘛拿数据,不就用GET请求吗?多直接。结果我这边请求一发出去,对面直接给我怼回来一个“禁止GET方法调用”的错误。当时我就有点懵,啥情况这是?

第一反应,是不是我本地环境有问题?

你想,有时候网络抽风,或者浏览器缓存啥的,也可能出些怪问题。我就清清缓存,换个浏览器试试,甚至还抓个包看看,请求确实是发出去,参数也没错,就是对面服务器不让过。得,看来不是我这边的问题。

那是不是接口用错?

我就去找接口文档。翻半天,文档写得那叫一个简洁,简洁到几乎没啥用。关于这个接口,就写是获取配置的,压根没提要用啥方法,也没说有啥特殊限制。这下线索断。

没办法,只能去“刨根问底”。我开始看那个接口服务的代码。还代码权限我还有点。不看不知道,一看吓一跳。里面有个全局的过滤器或者拦截器之类的东西,愣是把所有GET请求给拦,说是什么安全策略统一要求,所有接口调用,不管你是读是写,一律得上POST。

我当时心里就嘀咕,这是啥操作?

读取数据用GET,这不约定俗成嘛简单明,还能利用缓存。非得拧着来,全用POST,还得把参数塞请求体里。这不是自找麻烦吗?后来打听一下,据说是之前有一次安全检查,有人提个建议,说为“绝对安全”,防止参数在URL里暴露,干脆把GET全禁。然后这个建议就莫名其妙地被执行,也没人再想着去评估合不合理,反正“照章办事”最安全。

找到原因就好办。虽然觉得挺别扭,但咱还得干活。没办法,只能老老实实把我这边调用代码改,把原来的GET请求改成POST,把参数也挪到请求体里。改完再一试,通!数据拿到。

这事儿让我想起以前待过的一个地方。那会儿也是,搞什么规范,要求代码注释率必须达到百分之多少多少。听起来挺好是?结果,大家为达标,写一堆废话注释,比如 `i = i + 1; // i自增1` 这种。指标是上去,代码可读性反而可能下降。纯粹是为应付检查,搞形式主义。

很多时候就是这样。

你在解决一个技术问题,搞半天,发现,技术本身没啥难的,难的是绕过那些莫名其妙的规定,或者跟制定规定的人沟通。有时候感觉,写代码本身可能只占工作的一小部分,更多时间花在理解“历史遗留问题”和“组织特色文化”上。

下次再碰到类似“禁止GET方法调用”这种看起来不合常理的怪事,除检查技术层面,也别忘琢磨琢磨,这背后是不是又有什么“特殊的故事”。解决问题嘛有时候得跳出代码本身去看。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]