今天在和RN联调的时候发现了一个很奇怪的问题,进行AES加密以后,加密串中的加号,到达后端以后消失了,变成了一个空格。。。可是H5调用过来并无问题呀。一样的接口,为何就RN调用过来会出问题呢!后端
第一反应确定是编码问题,可是H5和RN都问了一下,他们都是用了POST表单,都用了application/x-www-form-urlencoded。那这样也没问题呀。单来是能抓个包看下了。安全
一抓包就发现两个的不一样之处了。以f35Fyfz+8dfGyqbjDVzxVQ==为例,H5抓到的参数是f35Fyfz%2b8dfGyqbjDVzxVQ%3d%3d,RN抓到的参数是f35Fyfz+8dfGyqbjDVzxVQ==。app
也就是说是UrlEncode的问题,我连忙手动UrlEncode和UrlDecode下:框架
由图可知,出现这个状况,要么就是多UrlDecode了一次,或者说没有UrlEncode。那么问题就很好确认了!编码
随之立马问了一下H5和RN。H5这边Jquery框架里面默认统一对POST表单请求进行了UrlDecode,可是呢RN并无作这个动做。因此只要传过来的参数带有+等不安全字符,到达咱们后端以后Decode都是会有问题的。随后,RN对POST表单的接口加入UrlEncode,问题获得解决!加密
其实只要先后端保持一致,进行统一,若是前段进行了UrlEncode,那么后端就要UrlDecode。url
之后尽可能用JSON代替POST表单接口,这样不管和前段仍是RN联调都不会出现这种问题!3d