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.

Relaterte artiklar