主要跟进execute()中的getResponseWithInterceptorChain()

getResponseWithInterceptorChain()

- 该方法构成了一个拦截器链,通过依次执行不同功能的拦截器,来获取服务器的响应返回。
- 拦截器的分类:
- 应用程序拦截器:用户自定义拦截器(
client.interceptors()) - Network网络拦截器
-- 进入chain.proceed --进入4个参数的
proceed方法, 核心代码
new RealInterceptorChain创建拦截器链,注意传入参数是index+1, 表示后面创建只能从下一个拦截器开始,而非当前拦截器,这样就把整个拦截器构成了一个链条。
- 应用程序拦截器:用户自定义拦截器(


5个拦截器的作用
1. 重定向拦截器 RetryAndFollowUpInterceptor
作用:失败重连。
其中创建了streamAllocation,主要用于获取连接服务端的connection和用于服务端进行数据传输的输入输出流。实际使用在connectInterceptor。

followUpCount进行判断,超过最大重连次数(默认20)后,就会释放streamAllocation对象。


2. 桥接拦截器 BridgeInterceptor
作用:设置内容长度和编码方式,压缩,添加头部信息。

- GzipSource: 转化成解压的数据流。使用responseBody时直接以解压的方式读取流数据。
