记录UrlEncode的一个坑

  • 前言

今天在和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,问题获得解决!加密

  • 总结
  1. 其实只要先后端保持一致,进行统一,若是前段进行了UrlEncode,那么后端就要UrlDecode。url

  2. 之后尽可能用JSON代替POST表单接口,这样不管和前段仍是RN联调都不会出现这种问题!3d

相关文章
相关标签/搜索