这两个的区别主要是OkHttp调用的顺序不一样,如下图
代码里可以看到
val interceptors = mutableListOf<Interceptor>()
//先处理interceptor
interceptors += client.interceptors
//然后添加OkHttp自己的interceptor, 处理Cache, 重定向, 连接复用等
interceptors += RetryAndFollowUpInterceptor(client)
interceptors += BridgeInterceptor(client.cookieJar)
interceptors += CacheInterceptor(client.cache)
interceptors += ConnectInterceptor
if (!forWebSocket) {
//最后添加networkInterceptor
interceptors += client.networkInterceptors
}
interceptors += CallServerInterceptor(forWebSocket)
因为调用的顺序不一样, 所以区别如下
应用拦截器(Interceptor)
- 不需要担心中间过程的响应,如重定向和重试.
- 总是只调用一次,即使HTTP响应是从缓存中获取.
- 观察应用程序的初衷. 不关心OkHttp注入的头信息如: If-None-Match.
- 允许短路而不调用 Chain.proceed(),即中止调用.
- 允许重试,使 Chain.proceed()调用多次.
网络拦截器(Network interceptor)
- 能够操作中间过程的响应,如重定向和重试.
- 当网络短路而返回缓存响应时不被调用.
- 只观察在网络上传输的数据.
- 携带请求来访问连接.
参考
下面这篇文章写得很好,很清楚。