OkHttp 相关类
Feb 16, 2019
Interceptor
- RetryAndFollowUpInterceptor
用于重试和重定向,StreamAllocation
也是在此初始化。主要是while
拼装followUpRequest
。 - BridgeInterceptor
添加Content-Type
,"Transfer-Encoding", "chunked"
,gzip
等请求头和对应的相应解析。还有cookie
的处理。 - CacheInterceptor
根据CacheStrategy
来处理获取缓存响应,通过getCandidate
根据If-None-Match
配合etag
,If-Modified-Since
配合lastModified
等判断缓存是否有效。请求网络,是否304
,更新相应缓存条件,组装响应。使用了DiskLruCache
进行缓存的持久化,通过日志文件实现类似索引的功能,读写分离,写有类似事务的概念。定期清理。 - ConnectInterceptor
负责链接的建立和复用,以及连接上流的管理。 - CallServerInterceptor
连接建立后,与服务器进行数据交互,使用最终的request
和最原始的response
。
相关类
- StreamAllocation
连接和流的桥梁。持有RealConnection
连接和HttpCodec
流。通过newStream
寻找合适的连接,产生合适的流。findConnection
方法用于寻找合适的连接。 - RealConnection
物理连接的封装。持有rawSocket
(原始socket
),socket
-ssl
加密包装的SSLSocket
。功能包括tcp
的建立,协议的确定,tls
连接的建立等。相应的握手也是由这两个对应平台的系统类实现。还实现了CertificatePinner
,用于自定义证书指纹的验证。持有List<Reference<StreamAllocation>> allocations
,表示该连接上有几条流,http1.1
默认最大1.http2
没限制。 - Http1Codec/Http2Codec
分别代表http1.x
和http2
的解码器,也相对于代表流。负责请求头,请求体的写入和响应头,响应体的读取。 - ConnectionPool
连接池,管理连接的缓存和复用。cleanupRunnable
用于定期或者某些条件触发根据最大空闲连接和最大存活时间进行连接的清理。清理是根据有没有StreamAllocation
还在引用RealConnection
,也就是引用计数。当响应返回,在RetryAndFollowUpInterceptor
中streamAllocation.release()
,然后读取完response
后,在Http1Codec
中标记streamFinished
,然后表示这个连接空闲。