Gos miljøbaserte proxyvelger har et innebygd unntak for localhost og loopback-IP-destinasjoner. Å tømme NO_PROXY fjerner ikke dette unntaket. Dermed kan en lokal test gå direkte, mens en forespørsel til et offentlig vertsnavn bruker proxyen som forventet.

Regelen gjelder forespørselens destinasjon. Den hindrer deg ikke i å bruke en proxylytter som selv har adressen 127.0.0.1.

Undersøk velgeren uten å sende en forespørsel

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, kjører du programmet med proxyvariablene satt for prosessen. Programmet evaluerer bare velgerne; det kobler verken til dokumentasjonsproxyen eller til noen av destinasjonene.

Miljøoppdagelse og en eksplisitt velger følger ulike regler

ProxyFromEnvironment tar hensyn til destinasjonsskjemaet, miljøinnstillingene og reglene for omgåelse, inkludert særbehandlingen av loopback. ProxyURL returnerer den oppgitte proxy-URL-en for hver forespørsel som sendes til denne velgeren.

En egen transport med eksplisitt ProxyURL kan derfor sende en forespørsel til en lokal destinasjon gjennom en proxy. Det er bare nyttig når proxyen på legitimt vis kan nå den forespurte destinasjonen. localhost på en ekstern proxy er ikke localhost på den bærbare datamaskinen din, så en tvungen rute er ikke automatisk en nyttig tilkoblingstest.

Kontroller før prosessen har mellomlagret miljøet

Den miljøbaserte proxykonfigurasjonen i standard net/http mellomlagres etter første bruk. Senere endring av en miljøvariabel inne i det samme kjørende programmet er ikke en pålitelig måte å gjenta en test med en ny konfigurasjon på. Start en ny prosess med de tiltenkte verdiene, eller oppgi en eksplisitt velger som du styrer oppførselen til.

Denne loopback-oppførselen gjelder standardproxyvelgeren i Go 1.27.3. Andre språk og HTTP-klienter kan bruke andre rutingsregler for localhost.

Relaterte artikler