Механізм выбару проксі з асяроддзя ў Go мае ўбудаванае выключэнне для localhost і мэтавых loopback IP-адрасоў. Ачыстка NO_PROXY не прыбірае гэтага выключэння. Таму лакальны тэст можа ісці наўпрост, а запыт да публічнага імя хоста выкарыстоўваць проксі, як і чакалася.

Правіла датычыцца адрасата запыту. Яно не перашкаджае выкарыстоўваць слухач проксі, уласны адрас якога — 127.0.0.1.

Праверце выбар без адпраўкі запыту

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

Каб пабачыць параўнанне з асяроддзем, запусціце праграму з зададзенымі для працэсу зменнымі проксі. Праграма толькі вылічвае вынікі функцый выбару; яна не злучаецца ні з проксі з дакументацыі, ні з якім-небудзь з адрасатаў.

Вызначэнне з асяроддзя і яўны выбар — розныя палітыкі

ProxyFromEnvironment улічвае схему адрасата, налады асяроддзя і правілы абыходу, у тым ліку асаблівую апрацоўку loopback. ProxyURL вяртае зададзены URL проксі для кожнага запыту, перададзенага гэтай функцыі выбару.

Таму асобны transport з яўным ProxyURL можа накіраваць запыт да лакальнага адрасата праз проксі. Гэта карысна толькі тады, калі проксі можа правамерна дасягнуць запытанага адрасата. localhost аддаленага проксі — не localhost вашага ноўтбука, таму прымусовы маршрут сам па сабе не робіць тэст сувязі карысным.

Правярайце да таго, як працэс закэшуе асяроддзе

Проксі-канфігурацыя з асяроддзя ў стандартным net/http кэшуецца пасля першага выкарыстання. Змена зменнай асяроддзя пазней у той самай запушчанай праграме — ненадзейны спосаб паўтарыць праверку з новай канфігурацыяй. Запусціце новы працэс з патрэбнымі значэннямі або задайце яўную функцыю выбару, паводзіны якой вы кантралюеце.

Гэтыя паводзіны loopback датычацца стандартнага механізму выбару проксі Go 1.27.3. Іншыя мовы і HTTP-кліенты могуць выкарыстоўваць іншыя правілы маршрутызацыі для localhost.

Падобныя артыкулы