OKHttpソースコード分析
https://www.jianshu.com/p/27c1554b7fee
Response getResponseWithInterceptorChain() throws IOException {
// Build a full stack of interceptors.
List<Interceptor> interceptors = new ArrayList<>();
//在配置 OkHttpClient 时设置的 interceptors,放在第一位
interceptors.addAll(client.interceptors());
// 负责失败重试以及重定向
interceptors.add(retryAndFollowUpInterceptor);
// 桥拦截器,添加一些Header和移除一些header,例如body的contentLength是-1,则移除Content-Length这个header
interceptors.add(new BridgeInterceptor(client.cookieJar()));
// 负责读取缓存直接返回、更新缓存
interceptors.add(new CacheInterceptor(client.internalCache()));
// 负责和服务器建立连接
interceptors.add(new ConnectInterceptor(client));
if (!forWebSocket) {
// 配置 OkHttpClient 时设置的 networkInterceptors
interceptors.addAll(client.networkInterceptors());
}
// 负责向服务器发送请求数据、从服务器读取响应数据
interceptors.add(new CallServerInterceptor(forWebSocket));
OkHttp分析(1)使用法から原理を見る
https://www.jianshu.com/p/7b29b89cd7b5
OkHttp分析(2)ネットワーク接続
https://www.jianshu.com/p/da071ad21b6d
インタビューエッセンシャル-ソースコードシリーズOkHttp3
https://www.jianshu.com/p/7c2bb28ccac4
OKHTTPキャッシュ構成の詳細な説明
https://blog.csdn.net/briblue/article/details/52920531
okhttp接続プールの再利用メカニズム
https://blog.csdn.net/tangjiean/article/details/51729371
OkHttp3接続プールと接続確立プロセスの分析(パート1)
https://sq.163yun.com/blog/article/188729834576564224
Okhttp3インターセプター-アプリケーションインターセプターとネットワークインターセプターの違い
https://www.pianshen.com/article/7635452443/
Okhttp3では、インターセプターはアプリケーションインターセプターとネットワークインターセプターに分けられますが、両者には大きな違いがあります。使用する際には、誤用による不必要なトラブルを防ぐために注意が必要です。次に、これら2つのインターセプターの違いについて説明します。 。。
まず、Okhttp実行フローチャートであるインターセプター実行プロセスを見てください。
インターセプターの実行シーケンス図を見てください
上記の2つの図によると、アプリケーションインターセプターとネットワークインターセプターの実行フローチャートを一覧表示できます。
アプリケーションインターセプター:
- リダイレクトするか再接続に失敗するかを気にする必要はありません
- データがキャッシュからのものであっても、アプリケーションインターセプターは1回だけ呼び出されます
- 次のようなOkhhtpによって挿入されたヘッダーを考慮せずに、アプリケーションの最初の意図のみを考慮してください。if-None-Match。これは、他の外部要因に関係なく、最終的な戻り結果のみが考慮されることを意味します。
- 2番目の図によると、カスタムアプリケーションインターセプターが実行を開始する最初のインターセプターであることがわかります。したがって、この文の意味は、アプリケーションインターセプターがChain.proceed()を介して他のインターセプターを実行するかどうかを決定できることです。
- 前の文の意味と同様に、Chain.proceed()を介して他のインターセプターへの複数の呼び出しを実行できます。
ネットワークブロッカー:
- 3番目の図によると、この文の意味は、ネットワークインターセプターがリダイレクトと失敗した再接続の戻り値を操作できることであることが理解できます。
- 最初の図によると、この文の意味は、キャッシュ内のデータがChain.proceed()に送信されないことであることがわかります。したがって、ネットワークインターセプターは実行できません。
- これは、ネットワークを介して送信されるすべてのデータをネットワークインターセプターを介して監視できることを意味します
- 2番目の図によると、サービス接続を要求するインターセプターはネットワークインターセプターの前に実行されることがわかります。したがって、ネットワークインターセプターが実行されると、アプリケーションインターセプターは実行しないため、サーバー要求の接続情報が要求に表示されます。対応する接続情報へ。