Gos miljöbaserade proxyväljare har ett inbyggt undantag för localhost och destinationer med loopback-IP. Att tömma NO_PROXY tar inte bort det undantaget. Därför kan ett lokalt test gå direkt medan en begäran till ett offentligt värdnamn använder proxyn som väntat.

Regeln gäller begärans destination. Den hindrar dig inte från att använda en proxylyssnare vars egen adress är 127.0.0.1.

Granska väljaren utan att skicka en begäran

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)
    }
}

Om du vill se jämförelsen med miljön kör du programmet med proxyvariablerna inställda för processen. Programmet utvärderar bara väljarna; det ansluter varken till dokumentationsproxyn eller till någon av destinationerna.

Miljöupptäckt och en uttrycklig väljare följer olika principer

ProxyFromEnvironment tar hänsyn till destinationsschemat, miljöinställningarna och reglerna för att gå förbi proxyn, inklusive den särskilda loopback-hanteringen. ProxyURL returnerar den angivna proxy-URL:en för varje begäran som skickas till den väljaren.

En separat transport med uttrycklig ProxyURL kan därför skicka en begäran till en lokal destination genom en proxy. Det är bara användbart om proxyn på ett legitimt sätt kan nå den begärda destinationen. En fjärrproxys localhost är inte din bärbara dators localhost, så att tvinga rutten är inte automatiskt ett användbart anslutningstest.

Kontrollera innan processen har cachelagrat sin miljö

Den miljöbaserade proxykonfigurationen i standard-net/http cachelagras efter första användningen. Att senare ändra en miljövariabel i samma körande program är inte ett tillförlitligt sätt att upprepa ett test med en ny konfiguration. Starta en ny process med de avsedda värdena eller ange en uttrycklig väljare vars beteende du styr.

Detta loopback-beteende gäller standardproxyväljaren i Go 1.27.3. Andra språk och HTTP-klienter kan använda andra routningsregler för localhost.

Relaterade artiklar