okhttp详解系列三:桥拦截器 BridgeInterceptor

BridgeInterceptor拦截器简要描述一下就是做了如下三件事:

  1. 首先会把用户的Request进行进一步的处理(处理request header),转换成真正请求网络的Request;
  2. 然后继续调用其他拦截器进行网络请求;
  3. 最后收到响应结果后保存cookie,并解压缩gzip,最终转换为用户的Response。

BridgeInterceptor处理时序

BridgeInterceptorBridgeInterceptorRequestRequestRequest.BuilderCookieJarCookieJarRealInterceptorChainRealInterceptorChaininterceptnewBuilder()基于用户传入的Request生成新的Request.BuilderRequest.Builder如果body不为null,则根据需要添加请求头:Content-Type、Content-Length、Transfer-Encoding如果Host不存在,则添加如果Connection,则添加Connection=Keep-Alive如果用户没有指定Accept-Encoding和Range头,则设置为gziploadForRequest(): 加载cookie添加Cookie添加User-Agentbuild()new() 生成新的Requestproceed(Request) 继续其他拦截器的处理流程其他拦截器处理完成receiveHeaders(): 保存cookie,header中的Set-Cookie字段如果响应内容是gzip格式,则进行解压处理返回 Response

从上述流程可以看出BridgeInterceptor拦截器的处理逻辑比较简单。