Hvorfor Go går uden om proxyen for localhost
Skeln mellem Gos indbyggede loopback-undtagelse og NO_PROXY, og sammenlign miljøbaseret routing med en eksplicit ProxyURL.
Gos miljøbaserede proxyvælger har en indbygget undtagelse for localhost og loopback-IP-destinationer. At tømme NO_PROXY fjerner ikke denne undtagelse. Derfor kan en lokal test gå direkte, mens en forespørgsel til et offentligt værtsnavn bruger proxyen som forventet.
Reglen vedrører forespørgslens destination. Den forhindrer dig ikke i at bruge en proxylytter, hvis egen adresse er 127.0.0.1.
Undersøg vælgeren uden at sende en forespørgsel
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)
}
}
Hvis du vil se sammenligningen med miljøet, skal du køre programmet med proxyvariablerne sat for processen. Programmet evaluerer kun vælgerne; det forbinder hverken til dokumentationsproxyen eller til nogen af destinationerne.
Miljøregistrering og en eksplicit vælger er forskellige politikker
ProxyFromEnvironment tager hensyn til destinationsskemaet, miljøindstillingerne og omgåelsesreglerne, herunder den særlige loopback-håndtering. ProxyURL returnerer den angivne proxy-URL for hver forespørgsel, der sendes til den vælger.
En særskilt transport med eksplicit ProxyURL kan derfor sende en forespørgsel til en lokal destination gennem en proxy. Det er kun nyttigt, når proxyen legitimt kan nå den ønskede destination. En fjernproxys localhost er ikke din bærbares localhost, så en tvungen rute er ikke automatisk en nyttig forbindelsestest.
Kontrollér, før processen har cachet sit miljø
Den miljøbaserede proxykonfiguration i standard-net/http caches efter første brug. Senere ændring af en miljøvariabel i det samme kørende program er ikke en pålidelig måde at gentage en test med en frisk konfiguration på. Start en ny proces med de ønskede værdier, eller angiv en eksplicit vælger, hvis adfærd du styrer.
Denne loopback-adfærd gælder for standardproxyvælgeren i Go 1.27.3. Andre sprog og HTTP-klienter kan bruge andre routingregler for localhost.