Timeout für einen Apache-HttpClient-5-Proxy, der beim CONNECT hängen bleibt
Legen Sie den Socket-I/O-Timeout des Connection Managers für den Tunnelaufbau fest, zusätzlich zum separaten TCP-Connect-Timeout.
Der Proxy nahm die TCP-Verbindung an, beendete aber nie die CONNECT-Antwort. Die Antwort der Website hat noch nicht begonnen; ein Timeout, der nur auf diese spätere Antwort zielt, kann diesen Aufbau unbegrenzt warten lassen.
Für Apache HttpClient 5.3.1 setzen Sie die Standardwerte des Connection Managers:
var connection = ConnectionConfig.custom()
.setConnectTimeout(Timeout.ofSeconds(5))
.setSocketTimeout(Timeout.ofSeconds(10))
.build();
var manager = PoolingHttpClientConnectionManagerBuilder.create()
.setDefaultConnectionConfig(connection)
.build();
var client = HttpClients.custom()
.setConnectionManager(manager)
.setProxy(new HttpHost("http", "proxy.example", 8080))
.build();Verwenden Sie die Klassen von Apache HttpComponents 5 unter org.apache.hc, mit Timeout im Paket core5 als Hilfsklasse. Behalten Sie den Client für seine Arbeit und schließen Sie ihn danach. Für einen isolierten öffentlichen HTTP-Test liefert ein Kandidat aus der HTTP-Proxy-Liste den Endpunkt; halten Sie das Ziel konstant, wenn Sie Timeouts vergleichen.
| Grenze | Abgedeckte Wartezeit |
|---|---|
| Connect-Timeout | Verbindungsaufbau |
| Socket-Timeout | Standard-I/O-Inaktivität, einschließlich des CONNECT-Austauschs |
| Pool-Beschaffung / Antwort der Anwendung | Andere separat konfigurierte Phasen |
Nach CONNECT kann TLS eine eigene Einrichtungsgrenze über die TLS-Konfiguration von HttpClient 5 benötigen. Unterscheiden Sie außerdem Inaktivität von einer Gesamtfrist: Unterbrochene Bytes oder wiederholte Authentifizierungsaustausche können die Gesamtzeit verlängern. Nutzen Sie die unterstützte Deadline- und Abbruchrichtlinie der Anwendung für ein Budget für den gesamten Vorgang.