最近遇到的兩個(gè)HTTP傳輸?shù)男】?/h2>

最近在工作里遇到了兩個(gè)關(guān)于HTTP傳輸?shù)男】樱涗浺幌隆?/p>

  1. 使用get方法參數(shù)傳遞AES密文,偶發(fā)解密失敗。發(fā)現(xiàn)是HTTP GET請(qǐng)求會(huì)將+號(hào)轉(zhuǎn)為空格,導(dǎo)致解密失敗。
  2. 支付寶支付通過(guò)post方式來(lái)進(jìn)行表單跳轉(zhuǎn)時(shí),商品名稱(subject)出現(xiàn)中文亂碼問(wèn)題。

經(jīng)過(guò)一番google后得到結(jié)果如下。

HTTP GET + 轉(zhuǎn)為空格

問(wèn)題描述

使用get方法參數(shù)傳遞AES密文,偶發(fā)解密失敗。發(fā)現(xiàn)是HTTP GET請(qǐng)求會(huì)將+號(hào)轉(zhuǎn)為空格,導(dǎo)致解密失敗。

問(wèn)題原因

GET請(qǐng)求會(huì)把+號(hào)轉(zhuǎn)為空格,為什么呢?

在RFC2396中,列明了";" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," 這些字符為保留字符,需要轉(zhuǎn)譯后才能出現(xiàn)在uri中。

另外又由于RFC1866中,列出

The default encoding for all forms is 'application/x-www-form-urlencoded'. A form data set is represented in this media type as follows:

  1. The form field names and values are escaped: space characters are replaced by `+'.
  2. ...

所有表單的默認(rèn)編碼為application/x-www-form-urlencoded。表單的數(shù)據(jù)按如下規(guī)則來(lái)表示:

  1. 表單中的鍵名或鍵值中,空格會(huì)被+號(hào)代替
  2. ...

那么在一些web框架處理的時(shí)候,不嚴(yán)格區(qū)分GET和POST方法的參數(shù)時(shí),則會(huì)發(fā)生,如果原始值內(nèi)有+號(hào),會(huì)被認(rèn)為是空格。

解決方案

  1. 在值明確有可能有+號(hào)并且不可能有空格的時(shí)候,直接replaceAll(' ', '+')
  2. 在傳遞值前預(yù)先進(jìn)行urlencode,把+轉(zhuǎn)為%2B就沒(méi)問(wèn)題了。

POST 表單中文亂碼,GET表格卻不會(huì)

問(wèn)題描述

支付寶支付通過(guò)post方式來(lái)進(jìn)行表單跳轉(zhuǎn)時(shí),商品名稱(subject)出現(xiàn)中文亂碼問(wèn)題。

問(wèn)題原因

多次調(diào)試后,覺(jué)得對(duì)方應(yīng)該在展示頁(yè)面的時(shí)候使用了ISO-8859-1嘗試解碼,但很奇怪的是通知的時(shí)候商品的中文確實(shí)正常的,可是說(shuō)是非常奇妙了?;叵肫鸱答仜](méi)有異步通知的事情需要多方確認(rèn),沒(méi)有人知道怎么辦,可以說(shuō)是非常baoxiao了。

PS:demo似乎是使用post的,我看下后面能不能跑起來(lái)。

解決方案

使用get來(lái)進(jìn)行表單跳轉(zhuǎn)。

Reference

  1. Get + 號(hào)的問(wèn)答

  2. RFC 2396

  3. RFC1866

  4. escape/encodeURI/encodeURIComponent的不同

  5. 知乎版HTTP GET與POST的不同

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,726評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,334評(píng)論 3 82
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,511評(píng)論 19 139
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,783評(píng)論 2 20
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時(shí)間了解一下,本文主要是講http協(xié)議的一些基礎(chǔ),和一些...
    justCode_閱讀 2,148評(píng)論 0 23

友情鏈接更多精彩內(nèi)容