Okhttp源码解析(三)

Okhttp源码解析(一)

Okhttp源码解析(二)

继上一篇Okhttp源码解析的博客已经过去一年多了,当时没有继续写下去的原因是因为本皇的小公主出生了!(借口,其实就是因为分析下去发现内容太多,画不动图了)做为一个小区No.1的好爸爸(邻居册封的,我姑娘小区No.1漂亮,这点随我)当然就没时间写了。

那为什么又写了呢,原因是我现在在公司主攻网络框架…正好有时间写一波。

书接上文,现在我们来看一下OkHttpClient源码中的第一个拦截器:

RetryAndFollowUpInterceptor

在这里插入图片描述
这个拦截叫:重试 and 重定向拦截器,顾名思义就是干名字上的这些事的,那么它是怎么实现的呢?

这里注意我标红的部分稍后我来解析下这两个的含义

在这里插入图片描述

followUpRequest()中通过这些http状态码来确认是否需要重定向

HTTP_PROXY_AUTH 407 代理身份验证
HTTP_UNAUTHORIZED 401 未授权
HTTP_PERM_REDIRECT 308 重定向
HTTP_TEMP_REDIRECT 307 重定向
HTTP_MULT_CHOICE 300 Multiple Choices
HTTP_MOVED_PERM 301 Moved Permanently
HTTP_MOVED_TEMP 302 Temporary Redirect
HTTP_SEE_OTHER 303 See Other
HTTP_CLIENT_TIMEOUT 408 Request Time-Out
HTTP_UNAVAILABLE 503 Service Unavailable

总结:

  1. 创建StreamAllocation对象,这个对象实际上是根据域名和端口,从okhttp提供的链接池中查找可复用的链接(socket),这里先简单说一下,这是okhttp的关于网络请求的一个优化。HTTP协议是基于TCP协议的,每次建立链接都需要三次握手,关闭链接需要四次挥手。那么三次握手建立链接后我们保持这个链接一段时间,而不是请求结束就关闭链接,这样如果有相同域名和端口的http请求,就可以复用这个链接从而节省下三次握手建立链接的的时间。这部分内容会在后续文章中进行讲解
  2. 开启循环,层层调用,获取Response,如果获取过程出现异常,尝试重试,如果正常获取到,看看是否需要重定向,最大重定向次数20次,具体看代码注释相信都可以理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值