okhttp学习系列之interceptor和network interceptor的区别

这两个的区别主要是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)

  • 能够操作中间过程的响应,如重定向和重试.
  • 当网络短路而返回缓存响应时不被调用.
  • 只观察在网络上传输的数据.
  • 携带请求来访问连接.

参考

下面这篇文章写得很好,很清楚。

https://www.jianshu.com/p/2710ed1e6b48

猜你喜欢

转载自blog.csdn.net/weixin_43662090/article/details/114868599