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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值