简单列一下不同协议,序列化方式等的考虑。
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格式是比较好的选择。
因为这是最容易维护开发的,成本也比较低。