Go के पर्यावरण आधारित प्रॉक्सी चयनकर्ता में localhost और लूपबैक IP गंतव्यों के लिए अंतर्निहित अपवाद है। NO_PROXY खाली करने से वह अपवाद नहीं हटता। इसलिए स्थानीय परीक्षण सीधे जुड़ सकता है, जबकि सार्वजनिक होस्टनाम को भेजा गया अनुरोध अपेक्षा के अनुसार प्रॉक्सी इस्तेमाल करता है।

यह नियम अनुरोध के गंतव्य से संबंधित है। यह ऐसे प्रॉक्सी लिसनर के इस्तेमाल को नहीं रोकता जिसका अपना पता 127.0.0.1 है।

अनुरोध भेजे बिना चयनकर्ता जाँचें

package main

import (
    "fmt"
    "net/http"
    "net/url"
)

func main() {
    fixed, _ := url.Parse("http://203.0.113.10:8080")
    for _, target := range []string{
        "http://localhost:8000/",
        "http://127.0.0.1:8000/",
        "http://example.com/",
    } {
        request, _ := http.NewRequest("GET", target, nil)
        discovered, err := http.ProxyFromEnvironment(request)
        explicit, _ := http.ProxyURL(fixed)(request)
        fmt.Println(target, discovered, explicit, err)
    }
}

यदि पर्यावरण से तुलना देखना चाहते हैं, तो प्रक्रिया के लिए प्रॉक्सी वेरिएबल सेट करके प्रोग्राम चलाएँ। प्रोग्राम केवल चयनकर्ताओं का मूल्यांकन करता है; वह दस्तावेज़ के उदाहरण वाले प्रॉक्सी या किसी भी गंतव्य से नहीं जुड़ता।

पर्यावरण से पता लगाना और स्पष्ट चयनकर्ता अलग नीतियाँ हैं

ProxyFromEnvironment गंतव्य स्कीम, पर्यावरण सेटिंग और बायपास नियमों को देखता है, जिनमें लूपबैक का विशेष व्यवहार भी शामिल है। ProxyURL उस चयनकर्ता को दिए गए हर अनुरोध के लिए प्रदान किया गया प्रॉक्सी URL लौटाता है।

इसलिए स्पष्ट ProxyURL वाला समर्पित ट्रांसपोर्ट स्थानीय गंतव्य का अनुरोध प्रॉक्सी के ज़रिए भेज सकता है। यह तभी उपयोगी है जब प्रॉक्सी अनुरोधित गंतव्य तक वैध रूप से पहुँच सके। दूरस्थ प्रॉक्सी का localhost आपके लैपटॉप का localhost नहीं है, इसलिए रूट को मजबूर करना अपने आप में उपयोगी कनेक्टिविटी परीक्षण नहीं बन जाता।

प्रक्रिया के पर्यावरण को कैश करने से पहले जाँचें

मानक net/http का पर्यावरण आधारित प्रॉक्सी कॉन्फ़िगरेशन पहली बार इस्तेमाल के बाद कैश हो जाता है। उसी चल रहे प्रोग्राम के भीतर बाद में पर्यावरण वेरिएबल बदलना नई कॉन्फ़िगरेशन का परीक्षण दोहराने का भरोसेमंद तरीका नहीं है। इच्छित मानों के साथ नई प्रक्रिया शुरू करें या ऐसा स्पष्ट चयनकर्ता दें जिसके व्यवहार को आप नियंत्रित करते हों।

लूपबैक का यह व्यवहार Go 1.27.3 के मानक प्रॉक्सी चयनकर्ता पर लागू होता है। दूसरी भाषाएँ और HTTP क्लाइंट localhost के लिए अलग रूटिंग नियम इस्तेमाल कर सकते हैं।

संबंधित लेख