OKHttp五大拦截器

OKHttp五大拦截器,第1张

RetryAndFollowUpInterceptor重试重定向拦截器

重试拦截器在交出(交给下一个拦截器)之前,负责判断用户是否取消了请求;在获得了结果之后 会根据响应码判断是否需要重定向,如果满足条件那么就会重启执行所有拦截器。

重试

重定向(最大次数为20)
响应码说明重定向条件
407代理需要授权,如付费代理,需要验证身份通过proxyAuthenticator获 得到了Request。 例: 添加 Proxy-Authorization 请求头
401服务器需要授权,如某些接口需要登陆才能使用 (不安全,基本上没用了)通过authenticator获得到了Request。例: 添加 Authorization 请求头
3XX重定向响应OkHttpClient配置允许重定向
408请求超时。1、用户允许自动重试(默认允许) 2、本次请求的结果不是 响应408的重试结果 3、服务器未响应Retry-After(稍后重试),或者响应Retry-After: 0。
503服务不可用1、本次请求的结果不是 响应503的重试结果 2.服务器明确响应 Retry-After: 0,立即重试
421从当前客户端所在的IP地址到服务器的连接数超过了服务器许可的最大范围自动再次使用另一个连接对象发起请求
BridgeInterceptor桥接拦截器

桥接拦截器在交出之前,负责将HTTP协议必备的请求头加入其中(如:Host)并添加一些默认的行为(如:GZIP压缩);在获得了结果后,调用保存cookie接口并解析GZIP数据。

补全请求头
请求头说明
Content-Type请求体类型,如:application/x-www-form-urlencoded
Content-Length/Transfer-Encoding请求体解析方式
Host请求的主机站点
Connection: Keep-Alive默认保持长连接
Accept-Encoding: gzip接收响应体使用gzip压缩
CookieCookie身份识别
User-Agent用户信息,如: *** 作系统、浏览器等
得到响应:

1、读取Set-Cookie响应头并调用接口告知用户,在下次请求则会读取对应的数据设置进入请求头,默认CookieJar无实现;

2、响应头Content-Encoding为gzip,使用GzipSource包装解析。

CacheInterceptor缓存拦截器

缓存拦截器顾名思义,交出之前读取并判断是否使用缓存;获得结果后判断是否缓存。

缓存规则

Http的缓存我们可以按照行为将他们分为:强缓存和协商缓存

  • 命中强缓存时,浏览器并不会将请求发送给服务器。强缓存是利用http的返回头中的Expires或者Cache-Control两个字段来控制的,用来表示资源的缓存时间;
  • 若未命中强缓存,则浏览器会将请求发送至服务器。服务器根据http头信息中的Last-Modify/If-Modify- Since或Etag/If-None-Match来判断是否命中协商缓存。如果命中,则http返回码为304,客户端从缓存中加载资源。

缓存策略

拦截器通过CacheStrategy判断使用缓存或发起网络请求。此对象中的networkRequest与cacheResponse分别代表需要发起请求或者直接使用缓存

networkRequestcacheResponse说明
NullNot Null直接使用缓存
Not NullNull向服务器发起请求
NullNull要求使用缓存,但是没有缓存。直接gg,okhttp直接返回504
Not NullNot Null发起请求,若得到响应为304(无修改),则更新缓存响应并返回

即:networkRequest存在则优先发起网络请求,否则使用cacheResponse缓存,若都不存在则请求失败!

缓存检测

ConnectInterceptor连接拦截器

连接拦截器在交出之前,负责找到或者新建 一个连接,并获得对应的socket流;在获得结果后 不进行额外的处理。

链接流程

连接池清理

代理链接

CallServerInterceptor请求服务器拦截器

请求服务器拦截器进行真正的与服务器的通信,向服务器发送数据,解析读取的响应数据。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/924048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存