HttpURLConnection及HttpClient选择(转)
2015-07-30 17:21
501 查看
介绍Android中Http请求方式的选择、区别及几个常用框架对API的选择
1. 两种请求方式对比
Android Http请求API主要分两种:
第一种是Java的HttpURLConnection,默认带gzip压缩
第二种Apache的HttpClient,默认不带gzip压缩
两种方式请求connection都是keep alive,默认User-Agent不同。
关于两种方式发出去的请求头对比图如下:
上图是通过抓包抓包的,具体如何抓包可参考:Android利用Fiddler进行网络数据抓包
测试代码见:android-http-api-compare@github, 测试APK见:http-api-compare.apk
2. 常用Http框架对Http API的选择
在 Froyo(2.2) 之前,HttpURLConnection 有个重大 Bug,调用 close() 函数会影响连接池,导致连接复用失效,所以在 Froyo 之前使用 HttpURLConnection 需要关闭 keepAlive。
另外在 Gingerbread(2.3) HttpURLConnection 默认开启了 gzip 压缩,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了请求结果缓存。
再加上 HttpURLConnection 本身 API 相对简单,所以对 Android 来说,在 2.3 之后建议使用 HttpURLConnection,之前建议使用 AndroidHttpClient。
Retrofit及Volley框架默认在Android Gingerbread(API 9)及以上都是用HttpURLConnection,9以下用HttpClient。
Volley 源码解析以及更多对比可以参考:Volley 源码解析
3. GZip压缩
一般对于API请求需带上GZip压缩,因为API返回数据大都是JSon串之类字符串,GZip压缩后内容大小大幅降低,下面是这两个网页GZip压缩前后对比,都是第一条表示GZip压缩后,第二条为压缩前
更详细关于HttpURLConnection及HttpClient对比可见:Android’s HTTP Clients
原文详见:http://www.trinea.cn/android/android-http-api-compare/
1. 两种请求方式对比
Android Http请求API主要分两种:
第一种是Java的HttpURLConnection,默认带gzip压缩
第二种Apache的HttpClient,默认不带gzip压缩
两种方式请求connection都是keep alive,默认User-Agent不同。
关于两种方式发出去的请求头对比图如下:
上图是通过抓包抓包的,具体如何抓包可参考:Android利用Fiddler进行网络数据抓包
测试代码见:android-http-api-compare@github, 测试APK见:http-api-compare.apk
2. 常用Http框架对Http API的选择
在 Froyo(2.2) 之前,HttpURLConnection 有个重大 Bug,调用 close() 函数会影响连接池,导致连接复用失效,所以在 Froyo 之前使用 HttpURLConnection 需要关闭 keepAlive。
另外在 Gingerbread(2.3) HttpURLConnection 默认开启了 gzip 压缩,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了请求结果缓存。
再加上 HttpURLConnection 本身 API 相对简单,所以对 Android 来说,在 2.3 之后建议使用 HttpURLConnection,之前建议使用 AndroidHttpClient。
Retrofit及Volley框架默认在Android Gingerbread(API 9)及以上都是用HttpURLConnection,9以下用HttpClient。
Volley 源码解析以及更多对比可以参考:Volley 源码解析
3. GZip压缩
一般对于API请求需带上GZip压缩,因为API返回数据大都是JSon串之类字符串,GZip压缩后内容大小大幅降低,下面是这两个网页GZip压缩前后对比,都是第一条表示GZip压缩后,第二条为压缩前
更详细关于HttpURLConnection及HttpClient对比可见:Android’s HTTP Clients
原文详见:http://www.trinea.cn/android/android-http-api-compare/
相关文章推荐
- CURL C++网络延时或者最低网速下载设置
- 新博客有了,文章转移到 http://www.iosxxx.com/
- Python 3中HTTPparse 的使用
- android通过url读取网络图片
- hdu 4028 2011上海赛区网络赛H dp+map离散
- 网络编程笔记4
- 网络编程笔记3
- 网络编程笔记2
- http://xiejianglei163.blog.163.com/blog/static/1247276201441910377144/
- 网络编程笔记1
- NGINX + TOMCAT + MEMCACHED实现HTTP负载均衡
- 无法解析类型 javax.servlet.http.HttpServletRequest。从必需的 .class 文件间接引用
- http协议详解(转自乔晓松的博客)
- nginx 配置https 环境
- java端连接https注意事项
- Android get/post方式请求网络设置超时
- 推广利器之网络营销
- hdu 4027 2011上海赛区网络赛G 线段树 成段平方根 ***
- 【HttpClient4.5实训】一.HttpClient4.5模拟浏览器GET请求访问新浪网(非原文教程)
- HTTPS单向认证和双向认证