以 3.14.9版本为例,这应该是最后一个java版本了,后面的版本都是kotlin开发的。
implementation 'com.squareup.okhttp3:okhttp:3.14.9'
本文从Address出发,大致介绍了与Address相关的所有类的职责。
HttpUrl
一个完整的url可以包含哪些内容?
看一下这个类的构造方法
HttpUrl(Builder builder) {
this.scheme = builder.scheme;
this.username = percentDecode(builder.encodedUsername, false);
this.password = percentDecode(builder.encodedPassword, false);
this.host = builder.host;
this.port = builder.effectivePort();
this.pathSegments = percentDecode(builder.encodedPathSegments, false);
this.queryNamesAndValues = builder.encodedQueryNamesAndValues != null
? percentDecode(builder.encodedQueryNamesAndValues, true)
: null;
this.fragment = builder.encodedFragment != null
? percentDecode(builder.encodedFragment, false)
: null;
this.url = builder.toString();
}
前面几个数据拆解了url中的不同部分,包括:协议、用户名、密码、域名、端口、路径、参数、锚位。
builder.toString() 将各个部分组合为一个整体,如下:
http://username:password@jianshu.com:80/path1/path2?Key1=value1&key2=value2#anchor
Dns - domain name service
域名查询服务,通过域名获取主机IP地址。
InetAddress 表示一个IP地址,这个类没有开放的构造方法,必须使用getXX静态方法创建。
SocketFactory 和 SSLSocketFactory
套接字工厂,SSL套接字工厂, java SDK 内容。
Authenticator 账号校验
抢先验证和反应式验证
抢先验证:用http代理服务器实现https请求时,需要进行抢先验证。
反应式验证:服务端反馈401或407时,需要提交账号信息用于验证。
401: 用户没有[访问权限, 需要进行身份认证。
407:客户应首先通过代理服务器验证。
OkHttpClient 包含两个实例用于验证,分别为authenticator用于验证原始服务器账号、proxyAuthenticator 用于验证代理服务器账号。
Protocol
这是个枚举类, 包含以下数据
http/1.0 默认情况下不使用持久套接字,明文请求,过时
http/1.1 包含持久连接,明文请求
spdy/3.1 OkHttp不再支持该协议,使用http2.0
h2 就是http2.0,支持请求头压缩、多路复用、服务推送。
h2_prior_knowledge 明文http2.0
quic 快速udp网络连接,okhttp不支持,但可以通过拦截器实现支持。
ConnectionSpec
连接规定。
指定ssl的加密算法 - 或不指定加密算法。
CipherSuite
加密算法
这个类里面只有一个算法的名称,没有具体的算法实现逻辑。
类会缓存算法名称对应的CipherSuite对象
TlsVersion
TLS的版本号
TLS_1_3("TLSv1.3"), // 2016.
TLS_1_2("TLSv1.2"), // 2008.
TLS_1_1("TLSv1.1"), // 2006.
TLS_1_0("TLSv1"), // 1999.
SSL_3_0("SSLv3"), // 1996.
Proxy 和 ProxySelector
代理服务器设置和代理服务器选择器,java SDK内容。
参考: https://blog.csdn.net/qq_33022345/article/details/53453585
CertificatePinner 和 Pin
锁定SSL证书。
给指定的域名提供固定的证书,那该域名只有使用这个固定证书时才能正常访问。如果服务端证书改变,将无法访问。
Address
一个服务器地址的表示。
本文以上提到的所有类,都被用于Address类中。