HttpURLConnection及HttpClient选择(转)
介紹Android中Http請求方式的選擇、區(qū)別及幾個常用框架對API的選擇
1. 兩種請求方式對比
Android Http請求API主要分兩種:
第一種是Java的HttpURLConnection,默認帶gzip壓縮
第二種Apache的HttpClient,默認不帶gzip壓縮
兩種方式請求connection都是keep alive,默認User-Agent不同。
關(guān)于兩種方式發(fā)出去的請求頭對比圖如下:
上圖是通過抓包抓包的,具體如何抓包可參考:Android利用Fiddler進行網(wǎng)絡(luò)數(shù)據(jù)抓包
測試代碼見:android-http-api-compare@github, 測試APK見:http-api-compare.apk
?
2. 常用Http框架對Http API的選擇
在 Froyo(2.2) 之前,HttpURLConnection 有個重大 Bug,調(diào)用 close() 函數(shù)會影響連接池,導致連接復用失效,所以在 Froyo 之前使用 HttpURLConnection 需要關(guān)閉 keepAlive。
?
另外在 Gingerbread(2.3) HttpURLConnection 默認開啟了 gzip 壓縮,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了請求結(jié)果緩存。
再加上 HttpURLConnection 本身 API 相對簡單,所以對 Android 來說,在 2.3 之后建議使用 HttpURLConnection,之前建議使用 AndroidHttpClient。
?
Retrofit及Volley框架默認在Android Gingerbread(API 9)及以上都是用HttpURLConnection,9以下用HttpClient。
Volley 源碼解析以及更多對比可以參考:Volley 源碼解析
?
3. GZip壓縮
一般對于API請求需帶上GZip壓縮,因為API返回數(shù)據(jù)大都是JSon串之類字符串,GZip壓縮后內(nèi)容大小大幅降低,下面是這兩個網(wǎng)頁GZip壓縮前后對比,都是第一條表示GZip壓縮后,第二條為壓縮前
更詳細關(guān)于HttpURLConnection及HttpClient對比可見:Android’s HTTP Clients
?
原文詳見:http://www.trinea.cn/android/android-http-api-compare/
轉(zhuǎn)載于:https://www.cnblogs.com/jimmyfang/p/Triena.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的HttpURLConnection及HttpClient选择(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php支付宝开发
- 下一篇: Dijkstra算法的另一种证明