本文会先简单说下OkHttp3的工作流程,然后介绍OkHttp3的一些核心类(如连接池StreamAllocation以及各式各样的Interceptor),接着从源码角度分析一次HTTP请求在OkHttp3中所经历的过程,在不同的Interceptor(拦截器)可以看到一些OkHttp3设计的一些巧妙思想,最后对上述分析做个简单的总结。
Okhttp3是Square公司开源的强大高效的Java网络请求库,旨于替换Java的HttpUrlConnection和Apache的HttpClient的轻量级网络框架,已经被运用到很多开源库以及Android的源码中(Android Studio 在6.0之后,移除了HttpClient,并且用OKHttp代替了HttpUrlConnection)。
- 支持Http2/SPDY;
- 默认启用长连接,使用连接池管理,支持Cache(目前仅支持GET请求的缓存);
- 路由节点管理,提升访问速度;
- 透明的Gzip处理,节省网络流量。
- 灵活的拦截器,行为类似Java EE的Filter或者函数编程中的Map。