OkHttp完全解析(一)

OkHttp完全解析(一),第1张

以 3.14.9版本为例,这应该是最后一个java版本了,后面的版本都是kotlin开发的。

implementation 'com.squareup.okhttp3:okhttp:3.14.9'

一个完整的url可以包含哪些内容?

看一下这个类的构造方法

前面几个数据拆解了url中的不同部分,包括:协议、用户名、密码、域名、端口、路径、参数、锚位。

builder.toString() 将各个部分组合为一个整体,如下:

http://username:password@jianshu.com:80/path1/path2?Key1=value1&key2=value2#anchor

域名查询服务,通过域名获取主机IP地址

InetAddress 表示一个IP地址,这个类没有开放的构造方法,必须使用getXX静态方法创建。

套接字工厂,SSL套接字工厂, java SDK 内容。

抢先验证和反应式验证

抢先验证:用http代理服务器实现https请求时,需要进行抢先验证。

反应式验证:服务端反馈401或407时,需要提交账号信息用于验证。

401: 用户没有[访问权限, 需要进行身份认证。

407:客户应首先通过代理服务器验证。

OkHttpClient 包含两个实例用于验证,分别为authenticator用于验证原始服务器账号、proxyAuthenticator 用于验证代理服务器账号。

这是个枚举类, 包含以下数据

http/1.0 默认情况下不使用持久套接字,明文请求,过时

http/1.1 包含持久连接,明文请求

spdy/3.1 OkHttp不再支持该协议,使用http2.0

h2 就是http2.0,支持请求头压缩、多路复用、服务推送。

h2_prior_knowledge 明文http2.0

quic 快速udp网络连接,okhttp不支持,但可以通过拦截器实现支持。

连接规定。

指定ssl的加密算法 - 或不指定加密算法。

加密算法

这个类里面只有一个算法的名称,没有具体的算法实现逻辑。

类会缓存算法名称对应的CipherSuite对象

TLS的版本号

代理服务器设置和代理服务器选择器,java SDK内容。

参考: https://blog.csdn.net/qq_33022345/article/details/53453585

锁定SSL证书。

给指定的域名提供固定的证书,那该域名只有使用这个固定证书时才能正常访问。如果服务端证书改变,将无法访问。

一个服务器地址的表示。

本文以上提到的所有类,都被用于Address类中。

尽管你只提供了URL,OkHttp在规划连接服务器的连接时使用了三种类型:URL,Address和Route。

URLs是HTTP和网络的最基本的。除了作为一个通用的,网络资源的分散命名机制,它们也规定了如何访问网络资源。

URLs是抽象的:

它们也是具体的:每一个URL确定一个特定路径(像/square/okhttp)和查询(像?q=sharks&lang=en)。每个服务器有很多URL。

Addresses规定了服务器(像github.com)和所有连接服务器需要的静态配置:端口号,HTTPS设置和优先网络协议(像HTTP/2或SPDY)。

共享相同address的URLs也可能共享相同的下层TCP socket连接。共享一个连接有巨大的性能好处:低延迟,高吞吐量(因为TCP启动慢)和节省电源。OkHttp使用ConnectionPool来自动复用HTTP/1.X连接和多路传输HTTP/2和SPDY连接。

在OkHttp中,address的一些字段来自URL(机制,主机名,端口),剩下的来自OkHttpClient。

Routes提供了真正连接到服务器所需要的动态信息。这是明确的要尝试的IP地址(通过DNS查询发现),明确的要使用的代理服务器(如果使用了ProxySelector)以及什么版本的TLS来协商(针对HTTPS连接)。

对于一个地址有可能有很多路由,一个存在多个数据中心的网络服务器可能在它的DNS响应中产生多个IP地址。

当你使用OkHttp请求一个URL时,下面是它所做的:

当连接出现问题时,OkHttp会选择另外一个route进行尝试。这使得OkHttp可以在服务器部分地址无法访问时恢复。它同时对于当连接池过期或尝试的TLS版本不支持时有用。

一旦接收到响应,连接就会返回到池中,这样它可以在之后的请求复用。连接空闲一段时间会从池中移除。

原文链接:

https://github.com/square/okhttp/wiki/Connections

OkHttp官方文档系列文章:


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/293490.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-24
下一篇2023-04-24

发表评论

登录后才能评论

评论列表(0条)

    保存