HttpURLConnection和AndroidHttpClient
2015-10-30 08:49
666 查看
Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和AndroidHttpClient。
2、支持压缩功能,自动在请求头中加入Accept-Encoding: gzip,但在getContentLength()中获取到的是压缩后的数据长度,要获取实际长度需要读取整个流自己计算。
3、2.2之前存在连接池失效问题,如读取流失败或未完成,后面继续使用时会读取到脏数据。可以禁用连接池功能。
4、android 开发团队对 HttpURLConnectioin 比较重视,2.3版本增加 https 的改进,以及一些压缩和会话的机制。如果连接失败,它会自动去尝试重新进行连接。
5、4.0增加 http cache 功能HttpResponseCache,满足基本的
http 缓存,跟一般的 http cache 原理一样需要服务器支持。
缓存原理简单介绍:
(1)缓存利用http 头的Cache-Control,判断是否失效,未失效或无网络直接读取上次缓存,缓存一般存放于磁盘中。
(2)利用 http 头的If-Modified-Since或If-None-Match,请求数据到服务器,服务器根据If-Modified-Since或If-None-Match的值判断是否数据失效,未失效返回304状态,失效返回新的数据。
在 android 网络连接框架Volley
中自己实现了一套类似的 http cache。
6、请求时自动在 http 头加入手机信息User-Agent。
可见压缩后速度和传输数据量都减少,提升了网络请求性能。
2、android 开发团队已经弃用AndroidHttpClient,建议2.3以前使用 AndroidHttpClient,2.3(含)以后使用HttpURLConnectioin,新项目直接使用HttpURLConnectioin。
(一)HttpURLConnection
1、HttpURLConnection 是Sun公司提供的网络连接库,提供通用性、轻量级的网络连接,简单,但可扩展性强,基本的网络请求都满足,同时支持IPv6、代理、授权、Cookies等。2、支持压缩功能,自动在请求头中加入Accept-Encoding: gzip,但在getContentLength()中获取到的是压缩后的数据长度,要获取实际长度需要读取整个流自己计算。
3、2.2之前存在连接池失效问题,如读取流失败或未完成,后面继续使用时会读取到脏数据。可以禁用连接池功能。
private void disableConnectionReuseIfNecessary() { // 这是一个2.2版本之前的bug if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) { System.setProperty("http.keepAlive", "false"); } }
4、android 开发团队对 HttpURLConnectioin 比较重视,2.3版本增加 https 的改进,以及一些压缩和会话的机制。如果连接失败,它会自动去尝试重新进行连接。
5、4.0增加 http cache 功能HttpResponseCache,满足基本的
http 缓存,跟一般的 http cache 原理一样需要服务器支持。
缓存原理简单介绍:
(1)缓存利用http 头的Cache-Control,判断是否失效,未失效或无网络直接读取上次缓存,缓存一般存放于磁盘中。
(2)利用 http 头的If-Modified-Since或If-None-Match,请求数据到服务器,服务器根据If-Modified-Since或If-None-Match的值判断是否数据失效,未失效返回304状态,失效返回新的数据。
在 android 网络连接框架Volley
中自己实现了一套类似的 http cache。
6、请求时自动在 http 头加入手机信息User-Agent。
(二)AndroidHttpClient
1、AndroidHttpClient是Apache公司提供的库,封装了http的请求,参数,内容体,响应等,拥有众多API,但是因封装过多较冗余,很难扩展的同时兼容,目前已很少更新,5.1中已经被弃用。(三)对比
1、HttpURLConnectioin支持压缩(gzip)和缓存(4.0以后),AndroidHttpClient 不支持,分别用这两 api 请求百度地址抓取数据如下可见压缩后速度和传输数据量都减少,提升了网络请求性能。
2、android 开发团队已经弃用AndroidHttpClient,建议2.3以前使用 AndroidHttpClient,2.3(含)以后使用HttpURLConnectioin,新项目直接使用HttpURLConnectioin。
相关文章推荐
- TCP_Header解析
- Swift网络开发之NSURLSession学习笔记
- Java 网络编程 中的 服务器与客户端的 连接!
- c的网络编程
- HttpClient 4.3教程
- HttpClient 4.3教程 第一章 基本概念
- 网络环境下计算机硬件安全保障策略的探讨
- 海外网络游戏服务器,东南亚服务器,海外外贸服务器-就在影速科技
- 关于网络编程六种IO模型的形象比喻
- Xcode7.1下用CocoaPods安装Alamofire--swift下的第三方网络库
- Apache-httpd
- Apache-httpd https
- nginx配置ssl加密(单双向认证、部分https)
- 网络编程基础
- Vm下linux网络配置
- http 错误代码表
- 【HttpClient4.5中文教程】【第一章 :基础】1.5 异常
- 【HttpClient4.5中文教程】【第一章 :基础】1.4 HTTP协议拦截器
- 【HttpClient4.5中文教程】【第一章 :基础】1.3 HttpClient执行上下文
- android---(volley网络通信框架)