URIError-malformed 一次排坑记录
2019-03-01 本文已影响0人
张大壮呐
现象:一个前端页面访问服务端接口,同一个接口会访问几十次或者上百次。
排错过程:
1.发现前端有个判断逻辑,服务端接口响应后发生异常就尝试重新发起请求。
2.发现异常来源于解密响应报文的逻辑中,调用了des3.js的方法,是库中方法在decode过程报 URIError-malformed 异常。
3.通过这个错误反复排查入参是否编码问题后,无果。
4.通过前端进des3.js的方法前打日志,出des3前打日志,发现出去前有部分请求的报文是乱码的。而且是随机,时好时坏。
5.把有乱码前的密文,手写解密程序进行解密。复现问题。
6.由于之前请求服务端一个请求需要一个随机key做签名,此时通过其他key进行解密,若干key中有一个是可以的。
7.问题到这里基本清楚,就是key和请求的对应关系搞乱了。
8.由于前段请求服务端是并发的,这里的key做为了一个全局参数。所以解密的时候哪一个请求最先返回,则会先取用公用的key进行解密。
根因:前端并发请求服务端,key参数没有考虑并发。之所以报标题的问题,是由于key的原因解密失败成乱码。