URIError-malformed 一次排坑记录

现象:一个前端页面访问服务端接口,同一个接口会访问几十次或者上百次。

排错过程:

1.发现前端有个判断逻辑,服务端接口响应后发生异常就尝试重新发起请求。

2.发现异常来源于解密响应报文的逻辑中,调用了des3.js的方法,是库中方法在decode过程报 URIError-malformed 异常。

3.通过这个错误反复排查入参是否编码问题后,无果

4.通过前端进des3.js的方法前打日志,出des3前打日志,发现出去前有部分请求的报文是乱码的。而且是随机,时好时坏。

5.把有乱码前的密文,手写解密程序进行解密。复现问题。

6.由于之前请求服务端一个请求需要一个随机key做签名,此时通过其他key进行解密,若干key中有一个是可以的。

7.问题到这里基本清楚,就是key和请求的对应关系搞乱了。

8.由于前段请求服务端是并发的,这里的key做为了一个全局参数。所以解密的时候哪一个请求最先返回,则会先取用公用的key进行解密。

根因:前端并发请求服务端,key参数没有考虑并发。之所以报标题的问题,是由于key的原因解密失败成乱码。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容