簡單列一下不同協定,序列化方式等的考慮。
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格式是比較好的選擇。
因為這是最容易維護開發的,成本也比較低。