A Go környezetalapú proxyválasztója beépített kivételt tartalmaz a localhost és a loopback IP-célok számára. A NO_PROXY kiürítése nem távolítja el ezt a kivételt. Emiatt egy helyi teszt közvetlenül kapcsolódhat, miközben egy nyilvános gépnévre irányuló kérés az elvárt módon proxyt használ.

A szabály a kérés céljára vonatkozik. Nem akadályozza olyan proxyfigyelő használatát, amelynek saját címe 127.0.0.1.

Vizsgáld meg a választót kérés küldése nélkül

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

Ha látni szeretnéd a környezeti összehasonlítást, a folyamat proxyváltozóinak beállításával futtasd a programot. A program csak a választókat értékeli ki; nem kapcsolódik sem a dokumentációs proxyhoz, sem egyik célhoz sem.

A környezeti felderítés és az explicit választó eltérő szabályokat követ

A ProxyFromEnvironment figyelembe veszi a cél sémáját, a környezeti beállításokat és a megkerülési szabályokat, köztük a loopback különleges kezelését. A ProxyURL az átadott proxy-URL-t adja vissza minden olyan kéréshez, amelyet ennek a választónak adnak át.

Ezért egy explicit ProxyURL-t használó külön transport a helyi célhoz tartozó kérést is proxyn keresztül küldheti. Ez csak akkor hasznos, ha a proxy jogosan elérheti a kért célt. A távoli proxy localhost címe nem a laptopod localhost címe, ezért az útvonal kikényszerítése önmagában nem jelent hasznos kapcsolódási tesztet.

Ellenőrizz, mielőtt a folyamat gyorsítótárazza a környezetét

A szabványos net/http környezetalapú proxykonfigurációja az első használat után gyorsítótárba kerül. Ha később ugyanabban a futó programban megváltoztatsz egy környezeti változót, az nem megbízható mód egy új konfigurációs teszt megismétlésére. Indíts új folyamatot a kívánt értékekkel, vagy adj meg olyan explicit választót, amelynek viselkedését te szabályozod.

Ez a loopback-viselkedés a Go 1.27.3 szabványos proxyválasztójára vonatkozik. Más nyelvek és HTTP-kliensek eltérő localhost-útválasztási szabályokat használhatnak.

Kapcsolódó cikkek