‏DefaultTransport הסטנדרטי של Go מגדיר את Proxy ל-ProxyFromEnvironment. ‏&http.Transport{} שנבנה בנפרד כולל פונקציית Proxy nil, ולכן הוא אינו בוחר שום proxy.

ההבדל הזה יכול להופיע לאחר שהוספתם transport רק כדי לשנות פסק זמן. כשברירת המחדל הסטנדרטית עדיין מותקנת, שכפלו אותה ושנו את השדה הדרוש:

transport := http.DefaultTransport.(*http.Transport).Clone()
transport.ResponseHeaderTimeout = 15 * time.Second

client := &http.Client{
    Transport: transport,
    Timeout: 30 * time.Second,
}

השכפול שומר על בחירת ה-proxy מהסביבה ועל שאר הגדרות ברירת המחדל של ה-transport. הבדיקה של הסוג מניחה שהיישום לא החליף את DefaultTransport ב-RoundTripper אחר.

עבור transport שנבנה בכוונה מאפס, הגדירו Proxy: http.ProxyFromEnvironment במפורש כאשר זו מדיניות הניתוב שלו. פונקציית ProxyURL מפורשת מבטאת מדיניות אחרת: מתווך אחד נבחר.

הגדירו את ה-transport לפני שבקשות מקבילות משתמשות בו, ולאחר מכן השתמשו בו שוב לעומס העבודה. שינוי של אובייקט ברירת מחדל משותף עלול להשפיע על לקוחות לא קשורים.

הגדרות TLS מותאמות אישית נפרדות. אין צורך להשבית אימות תעודות כדי לשמור על גילוי proxy, והוא היה משנה את האבטחה של כל בקשת HTTPS מתאימה.

מאמרים קשורים