RPC数据传输

以HTTP GET请求为例,说明下我们的工程中RPC中数据的传输方式。

  1. 把发送的数据封装到一个对象object中
  2. object经过序列化得到json
  3. json再经过base64编码,得到base64Json
  4. base64Json的md5值,通过私钥(SHA1withRSA签名算法),计算出签名,并进行base64编码得到sign
  5. base64Json经过url编码,得到urlEncodeJson;sign经过url编码得到urlEncodeSign。把urlEncodeSign和base64EncodeJson当做HTTP参数发出请求。
  6. 接受响应,把response报文的数据实体得到responseJson(响应的Conten-Type=application/json)
  7. 把responseJson经过反序列化得到jsonObject
  8. 从jsonObject中得到responseSign和responceMsg,利用公钥验签。
  9. responseMsg经过base64解码得到msgJson
  10. 把msgJson反序列化为dataJsonObject,开始使用里面的字段。

有一点值得注意,就是GET请求发送前,参数需要urlencode。

对于接收方而言,如果是通过url传值,一定不要进行urlDecode如果是通过Cookie传至,则需要urlDecode。这是因为tomcat服务器会自动做一次decode。如果接收方想做decode,那么发送方需要将参数做两次encode。

今天工作中发现一个现象,HTTP请求参数是urlencode过的。如果通过浏览器get访问,服务器得到的参数是已经decode的;而通过POST请求,拿到的参数还是encode的。与前端沟通过,原因是数据在post请求的body中。

晚上回家后,使用org.apache.commons.httpclient.HttpClient做了测试,证实了前端的说法。

今天有点小感悟:每做一事,务必总结归纳出其中的套路。一个技术人的成长就是不断叠加套路的过程

相关阅读:关于URL编码 – 阮一峰的网络日志

    原文作者:packet
    原文地址: https://www.jianshu.com/p/6afd5183e009
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞