קביעת פסק זמן ל-proxy של Apache HttpClient 5 שנתקע במהלך CONNECT
הגדירו פסק זמן של socket I/O במנהל החיבורים להקמת המנהרה, לצד פסק הזמן הנפרד של חיבור TCP.
ה-proxy קיבל TCP אך מעולם לא השלים את תגובת CONNECT. תגובת האתר טרם החלה; פסק זמן שמכוון רק לתגובה מאוחרת זו עלול להשאיר את ההקמה הזו ממתינה ללא גבול.
עבור Apache HttpClient 5.3.1, הגדירו את ברירות המחדל של מנהל החיבורים:
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();השתמשו במחלקות של Apache HttpComponents 5 תחת org.apache.hc, עם Timeout בחבילת העזר core5. שמרו את הלקוח לעבודתו וסגרו אותו. לבדיקת HTTP ציבורית מבודדת, מועמד מתוך רשימת ה-proxy של HTTP מספק את נקודת הקצה; שמרו על היעד קבוע בעת השוואת פסקי זמן.
| מגבלה | ההמתנה המטופלת |
|---|---|
| פסק זמן חיבור | הקמת החיבור |
| פסק זמן socket | חוסר פעילות I/O כברירת מחדל, כולל חילופי CONNECT |
| השגה מהמאגר / תגובת היישום | שלבים אחרים המוגדרים בנפרד |
לאחר CONNECT, ייתכן ש-TLS יזדקק למגבלת הקמה משלו דרך תצורת ה-TLS של HttpClient 5. הבחינו גם בין חוסר פעילות לבין מועד אחרון כולל: בייטים לסירוגין או חילופי אימות חוזרים עלולים להאריך את הזמן הכולל. השתמשו במדיניות מועד אחרון או ביטול הנתמכת על ידי היישום עבור תקציב אחד לכל הפעולה.