相关请求库
1.Volley
github:
- https://github.com/google/volley
- https://github.com/mcxiaoke/android-volley
优点:
- 默认Android2.3即以上基于HttpURLConnection,2.3以下基于HttpClient
- 符合Http缓存语义的缓存机制(提供了默认的磁盘和内存等缓存)
- 请求队列的优先级排列
- 提供多样的请求取消机制
- 提供简便的图片加载工具
缺点:
- 不能下载体积大的文件
2.android-async-http
github:
https://github.com/android-async-http/android-async-http
优点:
- 在匿名回调中处理请求结果
- 在UI线程外处理Http请求
- 文件断点上传
- 智能重试
- 默认gzip压缩
- 支持解析成json格式
- 可将Cookies持久化到SharePreference
缺点:
- 不在维护,当有新需求的时候没法更新
3.okhttp(推荐)
github:
https://github.com/square/okhttp
优点:
- 支持http请求,https请求、支持同步异步
- 支持文件下载、加载图片、基于Http的文件上传
- 使用的是HttpURLConnection,不用担心android版本的变换
- 利用响应缓存来避免重复的网络请求
- 支持 SPDY,允许连接同一主机的所有请求分享一个socket,如果SPDY不可用,会使用连接池减少请求延迟
- 使用gzip压缩下载内容,且压缩操作对用户是透明的
4.Retrofit(推荐)
github:
https://github.com/square/retrofit
优点:
- 支持多种http请求库
- 注解处理,简化代码
- 支持上传和下载文件
- 支持同步、异步和RxJava
- 超级解耦、rest风格,更安全和高效
- 支持更换解析模式,如json、xml等
- 使用非常方便灵活
Http协议
1.定义
超文本传输协议(Hypertext transfer protocol),是一个应用层的通信协议
2.版本区别
- Http0.9
- 只接受GET一种请求方法,没有在通信中指定版本号,且不支持请求头。由于该版本不支持POST方法,因此客户端无法向服务器传递太多信息
- Http1.0、Http1.0+
- 相对0.9版本增加了版本号码、请求头、MIMIE、代理连接
- Http1.1
- 默认支持持久连接,支持缓存,支持管道发送多个请求
- Http2.0
- 支持spdy
- 支持多路复用,一个Tcp连接上同时跑多个Http请求,请求可设定优先级
- 去除不需要的Http头,压缩Http头,以减少需要的网络带宽
- 使用了SSL作为数据传输协议提供数据安全
- 对传输的数据使用gzip进行压缩
- 提供服务方发起通信,并向客户端推送数据的机制
- 特点
- 支持复用允许同时通过单一的Http/2连接发起多重的请求-响应消息
- 头部压缩
- hpack算法压缩数据
- 请求划分优先级
- 服务器推送流
- 支持spdy
3.Http的几种请求方式
- GET
请求获取Request-URI所表示的资源
- POST
在Request-URI所标识的资源后附加新的数据
- HEAD
获取由Request-URI所标识的资源的响应信息报头
- PUT
请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE
请求服务器删除Request-URI所标识的资源
- TRACE
请求服务器回送收到的请求信息,主要用于测试或诊断
- CONNET
保留将来使用
- OPTIONS
请求查询服务器性能,或者查询与资源相关的选项
4.Http响应码