Go localhost کے لیے پراکسی کو کیوں چھوڑ دیتا ہے
Go کے اندرونی لوپ بیک استثنا کو NO_PROXY سے الگ سمجھیں اور ماحول پر مبنی روٹنگ کا واضح ProxyURL سے موازنہ کریں۔
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 کے لیے مختلف روٹنگ قواعد استعمال کر سکتے ہیں۔