TCP 接続成功後のプロキシ CONNECT タイムアウト
TCP 接続が完了したからといってトンネル設定も完了したと決めつけず、CONNECT 中に有効なタイムアウトを特定します。
TCP 接続のタイムアウトは、クライアントがプロキシに接続した時点で役目を終えています。次の待ち時間、つまり完全な CONNECT 応答の受信は、別のタイマーで管理されている可能性があります。
プロキシがまだ上流へ接続している、認証メッセージをやり取りしている、あるいは別のサービスを待っている可能性があります。Web サイト本来の応答はまだ始まっていません。
| 最後に完了した段階 | 何をまだ待っているか |
|---|---|
| プロキシへの TCP 接続完了 | CONNECT の受け入れを含むプロキシのハンドシェイク |
| CONNECT 受け入れ済み | ターゲットが使用する場合の宛先 TLS |
| 宛先へのリクエスト送信済み | 宛先からの応答 |
コネクタがそのハンドシェイクを読み書きしている間に有効なタイマーを特定します。「response timeout」というプロパティは、ルート確立後に初めて有効になる場合があります。HttpClient 5 では、ConnectionConfig とそのソケットタイムアウト、TLS ハンドシェイク設定、リクエスト単位の応答タイムアウトを区別してください。関連する接続設定は、実際のクライアントが使うマネージャーを通じて適用します。古い Apache HttpClient の世代は異なる API を使うため、古いスニペットはこれらの責務を正しく示す地図にはなりません。
最終的な CONNECT 拒否はプロキシからの応答として扱います。成功応答の後に TLS が停止するのは別の失敗段階です。「TCP 接続済み。設定期限までに完全な CONNECT 応答なし」という表現は、漠然としたプロキシタイムアウトより問題を正確に表します。
全体の期限は、これらの段階的な制限と並んで呼び出し元の待ち時間を抑えられます。期限切れになったら、次の試行が接続容量を消費する前に、クライアントがサポートするライフサイクルで操作をキャンセルまたはクローズします。