1.前言
该拦截器的作用:
- 将用户请求转化为网络请求
- 将网络响应转化为用户响应
用户请求:用户创建的请求
网络请求:真正发送的请求
用户响应:经过解码/解压缩的网络响应
网络响应:真正接收到的响应
更具体点的就是,这个拦截器会帮你添加Cookies
,解码/解压缩收到的响应
2.用户请求转化为网络请求
听着挺唬人的,其实就是为了防止用户请求的一些头信息不符合HTTP 规范
,而做的一个检查机制。会从用户请求中新建一个请求。在新的请求上,将不符合的去掉,将没有的添加进来。
以下针对网络请求:
- 如果用户请求的
Body
设置了contentType
,则会添加Content-Type
头信息 - 如果用户请求的
Body
设置了contentLength
,则会添加Content-Length
头信息,并且移除Transfer-Encoding
头信息,否则,移除Content-Length
头信息,添加Transfer-Encoding
设置为分块传输 - 如果用户请求没有
Host
头信息,则添加Host
头信息 - 如果用户请求没有
Connection
头信息,则添加Connection
头信息为Keep-Alive
- 如果用户请求没有
Accept-Encoding
并且没有Range
头信息,则添加Accept-Encoding
头信息为gzip
- 如果用户请求没有
User-Agent
头信息,则添加User-Agent
头信息为okhttp/okhttp的版本
- 如果有
Cookies
,则把Cookies
信息带上
3. 将网络响应转化为用户响应
其实就是将网络响应解码/解压缩后返回。
满足下面的所有条件,OkHttp才会将响应解压缩:
- 我们在发送请求时声明了
Accept-Encoding
为gzip
- 响应的
body
数据采用了gzip
压缩
满足以上条件后,该拦截器会将网络响应解压缩,变为用户响应后返回给上一个拦截器:RetryAndFollowUpInterceptor