HttpClient和HttpURLConnection的区别

本文探讨了Volley框架在不同Android版本中采用的不同HTTP请求方式。在Android2.3及以上版本,使用HttpURLConnection;而在Android2.2及以下版本,则使用HttpClient。详细对比了HttpURLConnection和HttpClient的特点与优缺点,并给出了推荐使用的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Volley框架的源码中对于HTTP请求的使用在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。

HttpURLConnection:

HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。
不过在Android 2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。配置你的Web服务器来支持对客户端的响应进行压缩的功能,从而可以在这一改进上获取到最大的好处。如果在压缩响应的时候出现了问题,这篇文档会告诉你如何禁用掉这个功能。但是如果启动了响应压缩的功能,HTTP响应头里的Content-Length就会代表着压缩后的长度,这时再使用getContentLength()方法来取出解压后的数据就是错误的了。正确的做法应该是一直调用InputStream.read()方法来读取响应数据,一直到出现-1为止。在Android 4.0版本中,我们又添加了一些响应的缓存机制。当缓存被安装后(调用HttpResponseCache的install()方法),所有的HTTP请求都会满足以下三种情况:所有的缓存响应都由本地存储来提供。因为没有必要去发起任务的网络连接请求,所有的响应都可以立刻获取到。视情况而定的缓存响应必须要有服务器来进行更新检查。比如说客户端发起了一条类似于 “如果/foo.png这张图片发生了改变,就将它发送给我” 这样的请求,服务器需要将更新后的数据进行返回,或者返回一个304 Not Modified状态。如果请求的内容没有发生,客户端就不会下载任何数据。没有缓存的响应都是由服务器直接提供的。这部分响应会在稍后存储到响应缓存中。

HttpClient

DefaultHttpClient和它的兄弟AndroidHttpClient都是HttpClient具体的实现类,它们都拥有众多的API,而且实现比较稳定,bug数量也很少。但同时也由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android团队在提升和优化HttpClient方面的工作态度并不积极。  
HttpClient就是一个增强版的HttpURLConnection, 
HttpURLConnection可以做的事情HttpClient全部可以做
HttpURLConnection没有提供的有些功能,HttpClient也提供了,但它只是关注于如何发送请求、接收响应,以及管理HTTP连接。
比如一个Android应用需要向指定页面发送请求,但该页面并不是一个简单的页面,只有当用户已经登录,而且登录用户的用户名有效时才可访问该页面。如果使用HttpURLConnection来访问这个被保护的页面,那么需要处理的细节就太复杂了。
   其实访问Web应用中被保护的页面,使用浏览器则十分简单,用户通过系统提供的登录页面登录系统,浏览器会负责维护与服务器之间的Sesion,如果用户登录的用户名、密码符合要求,就可以访问被保护资源了。
   在Android应用程序中,则可使用HttpClient来登录系统,只要应用程序使用同一个HttpClient发送请求,HttpClient会自动维护与服务器之间的Session状态,也就是说程序第一次使用HttpClient登录系统后,接下来使用HttpClient即可访问被保护页而了。

到底用哪个?

Apache的HTTPclient对Eclair和Froyo(2.2版本以下)的错误比较少。是这几个版本的最佳选择,为了Gingerbread及以后的版本
更好。HttpURLConnection是最好的选择,它的简单的API和小的尺寸使得它非常适合安卓。透明压缩和响应缓存减少网络使用,明显提高速度和节省电池。新的应用程序应使用HttpURLConnection;它是我们将要花费我们的精力去研究。

谷歌支持HttpURLConnection原因有:
1.谷歌不愿意维护HTTPclient ,因为HTTPclient兼容性问题, 而支持HttpURLConnection
2.HttpURLConnection API简便而且包小,对安卓很合适
3.HttpURLConnection 对于提高速度和节省电池有帮助,同时谷歌也愿意在这方面花时间研究去更进一步的提高性能。

参考资料:
http://blog.youkuaiyun.com/hguang_zjh/article/details/33743249
http://blog.youkuaiyun.com/jack_eusong/article/details/50966020

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值