首页 > 代码库 > 移动App通讯协议及序列化方式的选择

移动App通讯协议及序列化方式的选择

简单列一下不同协议,序列化方式等的考虑。

http还是私有协议?

http协议优/缺点:

在服务器端只需要提供一份接口,浏览器和app共用。在app中嵌入web view也很容易。

http协议的相关工具非常多。开发人员很方便 。比如负载均衡,直接nginx搞定。

比如统计一个接口的调用次数,相当的方便,有现在的分析工具。

压力测试也很方便。

http协议可能http服务器有漏洞,但是这种漏洞真的是很少。

手机可以设置http proxy,这对于某些用户可能是很关键的。如果是私有协议,设置http proxy就无效了。


私有协议优/缺点:

比较复杂,可以自己做一层加密。

逆向有成本,攻击者可能会放弃。

不同语言,每个平台都要开发一套,耗时耗人力。

自己实现的协议有可能有漏洞,要防范恶意攻击。

节省流量。

wmwap下可能要http tunnel。


序列化方式选择,JSON或者protobuf等?

JSON:

通用的数据交换格式,开发人员很熟悉,很三方的工具类库很多。

数据体积比较大。

没有版本化,前后端需要一定的沟通成本。

xml:

体积大,在http服务里,属于被抛弃的格式。

protobuf/thrift:

版本升级很容易,基本没有负担。

体积小。

通迅协议没有官方标准,第三方实现可能比较混乱。

如果是用工具生成的代码,基本不会有序列化的漏洞。

据说微信用的是protobuf。

其它的的序列化方式,或者自己定制的序列化方式:

可能遇到序列化的bug;

多语言支持的问题;

序列化的漏洞问题;


如何应对cmwap?

貌似cmwap的用户还是不少的。

http://s.weibo.com/weibo/cmwap

微信貌似是支持cmwap的:

http://weixin.qq.com/cgi-bin/readtemplate?promote=2&nav=contact&t=weixin_faq_networkflow

http://www.zhihu.com/question/19796744   一个11年的cmwap和cmnet的用户比例的东东。

如果是自己定制的协议,可以要做一下http tunnel,即一开始时,发送一个http头来欺骗移动的网关。

TODO:网上有一些cmwap http tunnel的文章,从理论上应该是可行的。


http还是https?

安全性的考虑:

https比http要安全。

对于app,很大的一个安全威胁是伪造wifi热点,http很容易被抓包。

尽管OpenSSL漏洞让人们意识到https也不是那么的安全。但对于绝大部分人来说,https还是很安全的,因为攻击成功很高。

但是即使https也不是那么的安全,参考:流量劫持能有多大危害?

https要比http慢;

证书的费用;

部署的问题,证书要放到CDN上,不然拿不到用户的真实IP;

看到过一个数据,在中国有20%的地区的无线用户用https是连不上的(真实性,技术性未知)。

全站https还是部分https?

https开发比http要复杂;


总结:

人个认为,对于绝大部分的app,http协议+JSON格式是比较好的选择。

因为这是最容易维护开发的,成本也比较低。