Kvifor Go går utanom proxyen for localhost
Skil det innebygde loopback-unntaket i Go frå NO_PROXY, og samanlikn miljøbasert ruting med ein eksplisitt ProxyURL.
Den miljøbaserte proxyveljaren i Go har eit innebygd unntak for localhost og loopback-IP-destinasjonar. Å tømme NO_PROXY fjernar ikkje dette unntaket. Difor kan ein lokal test gå direkte, medan ein førespurnad til eit offentleg vertsnamn bruker proxyen som venta.
Regelen gjeld destinasjonen for førespurnaden. Han hindrar deg ikkje i å bruke ein proxylyttar som sjølv har adressa 127.0.0.1.
Undersøk veljaren utan å sende ein førespurnad
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)
}
}
Vil du sjå samanlikninga med miljøet, køyrer du programmet med proxyvariablane sette for prosessen. Programmet evaluerer berre veljarane; det koplar verken til dokumentasjonsproxyen eller til nokon av destinasjonane.
Miljøoppdaging og ein eksplisitt veljar følgjer ulike reglar
ProxyFromEnvironment tek omsyn til destinasjonsskjemaet, miljøinnstillingane og reglane for omgåing, medrekna særhandsaminga av loopback. ProxyURL returnerer den oppgitte proxy-URL-en for kvar førespurnad som vert send til denne veljaren.
Ein eigen transport med eksplisitt ProxyURL kan difor sende ein førespurnad til ein lokal destinasjon gjennom ein proxy. Det er berre nyttig når proxyen på legitimt vis kan nå den etterspurde destinasjonen. localhost på ein ekstern proxy er ikkje localhost på den berbare datamaskina di, så ei påtvinga rute er ikkje automatisk ein nyttig tilkoplingstest.
Kontroller før prosessen har mellomlagra miljøet
Den miljøbaserte proxykonfigurasjonen i standard net/http vert mellomlagra etter første bruk. Seinare endring av ein miljøvariabel i det same køyrande programmet er ikkje ein påliteleg måte å gjenta ein test med ein ny konfigurasjon på. Start ein ny prosess med dei tiltenkte verdiane, eller oppgi ein eksplisitt veljar som du styrer åtferda til.
Denne loopback-åtferda gjeld standardproxyveljaren i Go 1.27.3. Andre språk og HTTP-klientar kan bruke andre rutingsreglar for localhost.