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官方文档系列文章:
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)