app测试日常踩坑——关于goland底层把http请求的特殊字符”+“转化成空格

事情起因:在某主页面的接口由get改成post后,我们的应用陆续收到用户反馈说app的主页面一个模块出现网络异常,但是我们自己这边又一直没有复现,联系的用户清除客户端本地缓存后也都能恢复。

排查结果:经过查日志排查最后发现这部分用户之所因报网络异常是因为接口报401 ,后面排查出接口报401的原因是因为post请求接口有个uid的传参,这个uid里面有+导致,我们的服务端是用golang写的,而go底层会把特殊字符"+"转化成空格,而客户端在验签的时候是把"+"当成字符处理进行验签,从而导致客户端传的sign值在服务端这里验签不通过,接口返回401。

后续:因为有项目中有很多接口有uid的传参,于是提出疑问,是否很多接口都有问题,get接口是否会有相同问题。除上述接口外的其他接口都是get请求。

结论:开发给出的结论是,都会有问题,goland底层都会对"+"字符进行处理

实际验证:经过实际验证,让客户端开发写死某个get请求对uid传参,参数里有"+",刚开始抓包发现能正常请求和返回,后面怀疑是不是charles的问题,于是断开代理,连接公司guest网络,甚至使用流量数据,发现都是能正常返回数据的,没有问题

真正的结论:因为get请求客户端在get请求的时候,后面的参数会进行url编码,实际的"+"不是真正意义的"+"是编码后的,所以http的get请求到服务端的时候参数也没有"+",所以不会有验签失败的问题。真正有问题的只有http的post请求body里的传承有"+"的请求。

完结:遇到问题的时候还是要实际验证,不要拍脑袋。

posted on 2023-09-14 19:43  豆子1119  阅读(43)  评论(0编辑  收藏  举报

导航