Goov odabir proxyja prema okolini ima ugrađenu iznimku za localhost i odredišta s IP adresama povratne petlje. Pražnjenje NO_PROXY ne uklanja tu iznimku. Zbog toga lokalni test može uspostaviti izravnu vezu, dok zahtjev javnom nazivu računala koristi proxy prema očekivanju.

Pravilo se odnosi na odredište zahtjeva. Ne sprječava uporabu proxy slušača čija je vlastita adresa 127.0.0.1.

Provjerite odabir bez slanja zahtjeva

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

Želite li vidjeti usporedbu s okolinom, pokrenite program s proxy varijablama postavljenima za proces. Program samo izračunava rezultate funkcija odabira; ne povezuje se s proxyjem iz dokumentacije niti s ijednim odredištem.

Otkrivanje prema okolini i izričita funkcija odabira koriste različita pravila

ProxyFromEnvironment razmatra shemu odredišta, postavke okoline i pravila zaobilaženja, uključujući posebnu obradu povratne petlje. ProxyURL vraća navedeni URL proxyja za svaki zahtjev predan toj funkciji odabira.

Stoga namjenski transport s izričitim ProxyURL može poslati zahtjev lokalnom odredištu preko proxyja. To je korisno samo ako proxy može opravdano pristupiti zatraženom odredištu. localhost udaljenog proxyja nije localhost vašeg prijenosnika, pa prisilno usmjeravanje nije automatski koristan test povezivosti.

Provjerite prije nego što proces pohrani okolinu u predmemoriju

Proxy konfiguracija prema okolini u standardnom net/http pohranjuje se u predmemoriju nakon prve uporabe. Kasnija promjena varijable okoline unutar istoga pokrenutog programa nije pouzdan način ponavljanja testa s novom konfiguracijom. Pokrenite novi proces sa željenim vrijednostima ili navedite izričitu funkciju odabira čijim ponašanjem upravljate.

Ovo ponašanje povratne petlje primjenjuje se na standardni odabir proxyja u Go 1.27.3. Drugi jezici i HTTP klijenti mogu upotrebljavati drugačija pravila usmjeravanja za localhost.

Povezani članci