(二)OkHttp网络请求配置参数详解

前面说到OkHttp网络请求的总体框架。这一章节主要通过解读OkHttpClient的内容,了解可以通过框架配置哪些参数,以及这些参数的意义。让我们对OkHttp框架和HTTP协议之间的关系有更深的了解。

接下来按照OkHttpClient类中变量定义的顺序,逐一进行介绍。

connectionPoll

连接池。池是对同类对象的批量管理。一个连接使用完,先不立即进行释放,而是先放到“池”中。当需要一个连接时,不直接进行创建,而是先到连接池里进行查询,看是否有用的连接,如果有则进行复用,否则再创建新的连接。以此来减少需要创建重复连接的开销。

连接池,通过重用和自动回收来追求性能和资源占用的平衡。在连接池中的连接,根据具体的配置,在指定时长内没有被使用,则会自动进行释放。

关于复用,HTTP1和HTTP2有不同的方式。对于HTTP1需要被释放的、指向同一主机的连接才能进行复用。HTTP2支持多路复用,正在使用的连接也可以进行复用。

eventListenerFactory

网络事件监听器。通过设置监听器,可以知道网络访问各个阶段的状态,如连接建立、连接失败、重试、请求返回等。

retryOnConnectionFailure

连接失败时是否进行重试的开关。这个开关默认是打开的状态。在有些情形下,连接失败时,会进行重试。如果开关关闭,则不会进行重试。关于“重试”后面拦截器部分会详细进行讲解。

authenticator

用于鉴权的自动修正。我们知道HTTP请求中,会存在token过期,需要被刷新的问题。Authenticator会在token失效时,比如401错误,自动帮我们进行刷新。对这块不了解的,可以看下我前面关于介绍HTTP协议的文章。

followRedirects

是否进行重定向开关。当服务器返回需要重定向时,在该开关打开时,会按照服务器返回的重定向地址自动进行重定向。若该开关为false,则直接将请求结果返回给客户端。该开关默认是打开状态。

cookieJar

直译过来就是“装饼干的罐子”。

这个是用来存放Cookie的容器。OkHttp默认没有提供支持,返回是“空“”的容器。需要用户自己进行实现,将网站的Cookie存放在内存或什么位置。

cache

用于存放服务器返回响应的缓存数据。在有些情况下,如指定时间内,服务器返回的内容没有发生变化,则可以直接使用缓存的数据。减少网络请求的开销。

dns

进行域名解析的工具。使用它可以完成将域名解析成为IP地址。

它的核心方法“getAllByName”实际上是一个java的原生方法,接受一个域名参数,返回一组ip地址(一个域名可能对应多个ip地址)。我们可以直接使用这个java方法对域名进行ip地址查询。

proxy

用于配置代理服务器。作用是配置代理服务器后,客户端向代理服务器发起请求,由代理服务器代为向目标服务器发起请求。请求的结果也由代理服务器返回给客户端。

使用代理访问的场景主要有两种场景:1、管理者进行网络管制,某个网络里的所有主机都被限制了与外网直接联系,用户需要访问外部网络,需要经由固定的代理,有代理服务器筛选后发起网络请求;2、某个主机被限制了访问服务器,则可以经由代理发起请求,绕过访问限制。

proxySelector

代理类型选择器。类型有三种DIRECT、HTTP和SOCKS。默认是不使用代理,即是DIRECT类型,表示直连。

proxyAuthenticator

作用和前面的authenticator是一样的,proxyAuthenticator是用来处理代理服务器token失效的情况。

socketFactory

HTTP是使用Socket进行连接,就是用socketFactory进行创建。

sslSocketFactory

这个是创建专门用来给HTTPS用的带加密通讯的socket。

x509TrustManager

用于HTTPS通讯中,进行证书认证的工具。X509是一种证书的格式。现在所有的证书都是用的这种格式。

connectionSpecs

进行HTTPS连接时,客户端所支持的哪些TLS版本。

OkHttp中提供三套可供选择,从上到下的限制从严格到宽松。兼容性从弱到强。最下面的CLEARTEXT表示“明文”,表示不使用加密,即使用HTTP。

protocols

HTTP协议版本号。主要有HTTP1.0、HTTP1.1、SPDY_3、HTTP2、H2_PRIOR_KNOWLEDGE。

SPDY_3是HTTP2的前身。它是在HTTP1.x的基础上进行尝试的试验性协议,SPDY_3开发完了之后被贡献出来,被业界所接受形成新的协议,就是现在的HTTP2。SPDY_3现在已被废弃。

H2_PRIOR_KNOWLEDGE理解为是HTTP2的不加密版本。HTTP2默认是使用TLS加密传输。用明文方式传输就是H2_PRIOR_KNOWLEDGE。

hostnameVerifier

用于主机名验证的工具。我们知道在HTTPS通讯中除了验证证书的合法性,为防止来自恶意主机的合法证书,需要同时对主机名进行验证。

certificatePinner

表示“把证书订上”。有时为了更高级别的安全防护,客户端会记录某个证书的hash值,在进行证书验证时,不仅需要证书是合法的,还需要是“我”所指定的证书。

正常请求中建议不要使用。这样会导致,在服务器换了签名机构后,由于签名证书改变而无法进行请求访问。

certificateChainCleaner

这个是表示“证书链”的数据结构。我们知道服务器发来验证的证书,往往是一个证书链,签名机构给服务器证书签名,又要有签名机构给签名机构签名,递归的终点是内置在设备的根证书。证书链的第一个证书就是目标服务器的证书。

超时配置

进行一些超时配置,如请求超时、连接超时、读/写数据超时,HTTP2心跳包间隔等等。

到此我们理完了OkHttp关于网络请求的配置参数。可以看到这里基本上用到了我们前面讲的HTTP协议和HTTPS相关的内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值