Go aplinka grindžiamas įgaliotojo serverio parinkiklis turi įtaisytą išimtį localhost ir loopback IP paskirties adresams. NO_PROXY išvalymas šios išimties nepašalina. Todėl vietinis bandymas gali jungtis tiesiogiai, nors užklausa viešam serverio vardui naudoja įgaliotąjį serverį, kaip tikėtasi.

Taisyklė susijusi su užklausos paskirtimi. Ji nedraudžia naudoti įgaliotojo serverio klausymo taško, kurio paties adresas yra 127.0.0.1.

Patikrinkite parinkiklį nesiųsdami užklausos

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

Jei norite pamatyti palyginimą su aplinka, paleiskite programą procesui nustatę įgaliotojo serverio kintamuosius. Programa tik įvertina parinkiklius; ji nesijungia nei prie dokumentacijos pavyzdžio įgaliotojo serverio, nei prie kurios nors paskirties vietos.

Aptikimas iš aplinkos ir aiškus parinkiklis yra skirtingos politikos

ProxyFromEnvironment atsižvelgia į paskirties schemą, aplinkos nuostatas ir apėjimo taisykles, įskaitant specialų loopback apdorojimą. ProxyURL grąžina pateiktą įgaliotojo serverio URL kiekvienai tam parinkikliui perduotai užklausai.

Todėl atskiras transport su aiškiu ProxyURL gali siųsti užklausą vietinei paskirties vietai per įgaliotąjį serverį. Tai naudinga tik jei įgaliotasis serveris gali teisėtai pasiekti prašomą vietą. Nuotolinio įgaliotojo serverio localhost nėra jūsų nešiojamojo kompiuterio localhost, tad priverstinis maršrutas savaime nėra naudingas ryšio bandymas.

Patikrinkite, kol procesas dar neįrašė aplinkos į podėlį

Standartinio net/http aplinkos įgaliotojo serverio konfigūracija po pirmo naudojimo įrašoma į podėlį. Vėliau toje pačioje veikiančioje programoje pakeisti aplinkos kintamąjį nėra patikimas būdas pakartoti bandymą su nauja konfigūracija. Paleiskite naują procesą su norimomis reikšmėmis arba pateikite aiškų parinkiklį, kurio veikimą valdote.

Šis loopback veikimas taikomas standartiniam Go 1.27.3 įgaliotojo serverio parinkikliui. Kitos kalbos ir HTTP klientai gali naudoti kitokias localhost maršrutizavimo taisykles.

Susiję straipsniai