HttpUrlConnection和HttpClient的区别

来源:互联网 发布:视频展示台软件 编辑:程序博客网 时间:2024/05/24 22:45

HttpUrlConnection和HttpClient的区别

一.HttpClient:
1.背景:
Apache公司提供的库,提供高效的、最新的、功能丰富的支持HTTP协议工具包,支持HTTP协议最新的版本和建议,是个很不错的开源框架,封装了Http的请求,参数,内容体,响应等,拥有众多API。
2.优点:
拥有大量灵活的API,实现比较稳定,功能比较丰富,bug数量也很少。
3.缺点:
由于HttpClient的API数量过多,很难在不破坏兼容性的情况下对它进行升级和扩展,所以Android团队对于提升和优化HttpClient方面并不积极,并在Android6.0抛弃了HttpClient。
二.HttpUrlConnection:
HttpURLConnection是一种多用途、轻量极的HTTP客户端。
1.背景:
Sun公司提供的库,Java的标准类库java.net中的一员,但这个类什么都没封装,用起来很原始,若需要高级功能,则会显得不太方便,比如重访问的自定义,会话和cookie等一些高级功能。
2.优点:
(1)在Android 2.3版本,加入了更加透明化的响应压缩。
HttpURLConnection直接支持GZIP压缩,默认添加”Accept-Encoding: gzip”头字段到请求中,并处理相应的回应。
HTTP响应头里的Content-Length就会代表着压缩后的长度,这时再使用getContentLength()方法来取出解压后的数据就是错误的了。正确的做法应该是一直调用InputStream.read()方法来读取响应数据,一直到出现-1为止。
(2)在Android 2.3版本,增加了一些HTTPS方面的改进。
现在HttpsURLConnection使用SNI(Server Name Indication)的方式进行连接,使得多个HTTPS主机可以共享同一个IP地址。
(3)在Android 2.3版本,增加了一些压缩和会话的机制。
如果连接失败,自动去尝试重新进行连接。这使得HttpsURLConnection可以在不破坏老版本兼容性的前提下,更加高效地连接最新的服务器。
(3)在Android 4.0版本中,添加了一些响应的缓存机制。
a.完全的cache的response将直接从本地存储中获取。因为不需要网络连接,此类response可以立即得到。
b.视情况而定的缓存响应必须要由服务器来进行更新检查。比如说客户端发起了一条类似于“如果/foo.png这张图片发生了改变,就将它发送给我” 这样的请求,服务器需要将更新后的数据进行返回,或者返回一个304 Not Modified状态。如果请求的内容没有发生,客户端就不会下载任何数据。
c.没有cache的response将从服务器上获取。得到这些response之后会存储到cache以便将来使用。
3.缺点:
在Android 2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。尤其是在读取 InputStream时调用 close()方法,就有可能会导致连接池失效了。
三.总结:
在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。
在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。
以上主要来源于:
http://blog.csdn.net/guolin_blog/article/details/12452307
http://www.jianshu.com/p/a32d6980227b

原创粉丝点击