Výber proxy podľa prostredia v Go má vstavanú výnimku pre localhost a cieľové loopback IP adresy. Vyprázdnenie NO_PROXY túto výnimku neodstráni. Lokálny test preto môže ísť priamo, zatiaľ čo požiadavka na verejný názov hostiteľa používa proxy podľa očakávania.

Pravidlo sa týka cieľa požiadavky. Nebráni používať proxy listener, ktorého vlastná adresa je 127.0.0.1.

Skontrolujte výber bez odoslania požiadavky

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

Ak chcete vidieť porovnanie s prostredím, spustite program s proxy premennými nastavenými pre proces. Program iba vyhodnocuje výberové funkcie; nepripája sa k dokumentačnej proxy ani k žiadnemu z cieľov.

Zisťovanie z prostredia a explicitný výber používajú odlišné pravidlá

ProxyFromEnvironment zohľadňuje schému cieľa, nastavenia prostredia a pravidlá obchádzania vrátane osobitného spracovania loopback adries. ProxyURL vráti zadanú URL proxy pre každú požiadavku odovzdanú tejto výberovej funkcii.

Preto môže samostatný transport s explicitným ProxyURL poslať požiadavku na lokálny cieľ cez proxy. Užitočné je to len vtedy, ak proxy môže oprávnene dosiahnuť požadovaný cieľ. localhost vzdialenej proxy nie je localhost vášho notebooku, takže vynútenie trasy automaticky neznamená užitočný test konektivity.

Kontrolujte skôr, než proces uloží prostredie do vyrovnávacej pamäte

Konfigurácia proxy z prostredia v štandardnom net/http sa po prvom použití uloží do vyrovnávacej pamäte. Neskoršia zmena premennej prostredia v tom istom spustenom programe nie je spoľahlivý spôsob opakovania testu s novou konfiguráciou. Spustite nový proces s požadovanými hodnotami alebo zadajte explicitnú výberovú funkciu, ktorej správanie ovládate.

Toto správanie loopback adries platí pre štandardný výber proxy v Go 1.27.3. Iné jazyky a HTTP klienti môžu pre localhost používať odlišné pravidlá smerovania.

Súvisiace články