記錄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

相關文章
相關標籤/搜索