天天看點

移動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格式是比較好的選擇。

因為這是最容易維護開發的,成本也比較低。

繼續閱讀