Go က localhost အတွက် ပရောက်စီကို အဘယ်ကြောင့် ကျော်သွားသနည်း
Go ၏ မူလပါ loopback ခြွင်းချက်ကို NO_PROXY နှင့် ခွဲခြားပြီး environment အခြေပြု လမ်းကြောင်းရွေးချယ်မှုကို အတိအလင်းသတ်မှတ်ထားသော ProxyURL နှင့် နှိုင်းယှဉ်ပါ။
Go ၏ environment အခြေပြု ပရောက်စီရွေးချယ်သူတွင် localhost နှင့် loopback IP ဦးတည်ရာများအတွက် မူလပါ ခြွင်းချက်ရှိသည်။ NO_PROXY ကို အလွတ်ထားခြင်းက ထိုခြွင်းချက်ကို မဖယ်ရှားပါ။ ထို့ကြောင့် ဒေသတွင်း စမ်းသပ်မှုက တိုက်ရိုက်ချိတ်ဆက်နိုင်သော်လည်း အများသုံး host အမည်ထံ request က မျှော်လင့်ထားသလို ပရောက်စီကို အသုံးပြုနိုင်သည်။
ဤစည်းမျဉ်းသည် request ၏ ဦးတည်ရာနှင့် သက်ဆိုင်သည်။ ကိုယ်ပိုင်လိပ်စာ 127.0.0.1 ရှိသော ပရောက်စီ listener ကို အသုံးပြုခြင်းအား မတားဆီးပါ။
Request မပို့ဘဲ ရွေးချယ်သူကို စစ်ဆေးခြင်း
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)
}
}
Environment နှင့် နှိုင်းယှဉ်မှုကို ကြည့်လိုလျှင် process အတွက် ပရောက်စီ variable များ သတ်မှတ်ပြီး ပရိုဂရမ်ကို လုပ်ဆောင်ပါ။ ပရိုဂရမ်က ရွေးချယ်သူများကိုသာ အကဲဖြတ်သည်။ စာရွက်စာတမ်းနမူနာရှိ ပရောက်စီ သို့မဟုတ် မည်သည့်ဦးတည်ရာကိုမျှ မချိတ်ဆက်ပါ။
Environment မှ ရှာဖွေခြင်းနှင့် တိကျစွာသတ်မှတ်သော ရွေးချယ်သူတို့သည် မူဝါဒမတူကြ
ProxyFromEnvironment သည် ဦးတည်ရာ scheme၊ environment setting နှင့် loopback အတွက် အထူးကိုင်တွယ်မှုအပါအဝင် ပရောက်စီကျော်ခြင်းဆိုင်ရာ စည်းမျဉ်းများကို ထည့်သွင်းစဉ်းစားသည်။ ProxyURL သည် ထိုရွေးချယ်သူထံ ပေးပို့လာသော request တိုင်းအတွက် သတ်မှတ်ပေးထားသည့် ပရောက်စီ URL ကို ပြန်ပေးသည်။
ထို့ကြောင့် ProxyURL ကို အတိအလင်း သတ်မှတ်ထားသော သီးသန့် transport သည် ဒေသတွင်း ဦးတည်ရာ၏ request ကို ပရောက်စီမှတစ်ဆင့် ပို့နိုင်သည်။ ပရောက်စီက တောင်းဆိုသည့် ဦးတည်ရာထံ တရားဝင်ရောက်ရှိနိုင်မှသာ အကျိုးရှိသည်။ အဝေးရှိ ပရောက်စီ၏ localhost သည် သင့်လက်ပ်တော့၏ localhost မဟုတ်သောကြောင့် လမ်းကြောင်းကို အတင်းသတ်မှတ်ခြင်းသည် အလိုအလျောက် အသုံးဝင်သော ချိတ်ဆက်မှုစမ်းသပ်ချက် မဖြစ်ပါ။
Process က environment ကို cache မလုပ်မီ စစ်ဆေးခြင်း
စံ net/http ၏ environment ပရောက်စီ configuration ကို ပထမအသုံးပြုပြီးနောက် cache လုပ်ထားသည်။ ထိုပရိုဂရမ် လည်ပတ်နေစဉ် နောက်ပိုင်းတွင် environment variable ပြောင်းခြင်းသည် configuration အသစ်ဖြင့် စမ်းသပ်မှု ပြန်လုပ်ရန် စိတ်ချရသော နည်းလမ်းမဟုတ်ပါ။ ရည်ရွယ်သည့်တန်ဖိုးများဖြင့် process အသစ် စတင်ပါ၊ သို့မဟုတ် လုပ်ဆောင်ပုံကို သင်ထိန်းချုပ်နိုင်သော တိကျသည့် ရွေးချယ်သူကို ပေးပါ။
ဤ loopback လုပ်ဆောင်ပုံသည် Go 1.27.3 ၏ စံပရောက်စီရွေးချယ်သူနှင့် သက်ဆိုင်သည်။ အခြားဘာသာစကားများနှင့် HTTP client များသည် localhost အတွက် လမ်းကြောင်းရွေးချယ်သည့် စည်းမျဉ်းမတူနိုင်ပါ။