Batas waktu untuk proxy Apache HttpClient 5 yang macet saat CONNECT
Atur batas waktu socket I/O pengelola koneksi untuk penyiapan tunnel, bersama batas waktu koneksi TCP yang terpisah.
Proxy menerima TCP tetapi tidak pernah menyelesaikan balasan CONNECT. Respons situs web belum dimulai; batas waktu yang hanya menyasar respons berikutnya itu dapat membiarkan penyiapan ini menunggu tanpa batas.
Untuk Apache HttpClient 5.3.1, atur nilai default pengelola koneksi:
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();Gunakan kelas Apache HttpComponents 5 di bawah org.apache.hc, dengan Timeout di paket utilitas core5. Pertahankan klien untuk tugasnya dan tutup. Untuk uji HTTP publik yang terisolasi, kandidat dari daftar proxy HTTP menyediakan endpoint; jaga tujuan tetap stabil saat membandingkan batas waktu.
| Batas | Penantian yang ditangani |
|---|---|
| Batas waktu koneksi | Pembentukan koneksi |
| Batas waktu socket | Ketidakaktifan I/O default, termasuk pertukaran CONNECT |
| Pengambilan dari kumpulan / respons aplikasi | Tahap lain yang dikonfigurasi terpisah |
Setelah CONNECT, TLS dapat memerlukan batas penyiapan sendiri melalui konfigurasi TLS HttpClient 5. Bedakan juga ketidakaktifan dari tenggat waktu total: byte yang terputus-putus atau pertukaran autentikasi berulang dapat memperpanjang waktu total. Gunakan kebijakan tenggat waktu atau pembatalan yang didukung aplikasi untuk satu anggaran untuk seluruh operasi.