Mechanizm wyboru proxy ze środowiska w Go ma wbudowany wyjątek dla localhost i docelowych adresów IP pętli zwrotnej. Wyczyszczenie NO_PROXY nie usuwa tego wyjątku. Lokalny test może więc łączyć się bezpośrednio, podczas gdy żądanie do publicznej nazwy hosta używa proxy zgodnie z oczekiwaniami.

Reguła dotyczy celu żądania. Nie uniemożliwia korzystania z nasłuchu proxy, którego własny adres to 127.0.0.1.

Sprawdź wybór bez wysyłania żądania

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

Aby zobaczyć porównanie ze środowiskiem, uruchom program ze zmiennymi proxy ustawionymi dla procesu. Program jedynie oblicza wyniki funkcji wyboru; nie łączy się ani z proxy z dokumentacji, ani z żadnym z celów.

Wykrywanie ze środowiska i jawny wybór to różne polityki

ProxyFromEnvironment uwzględnia schemat celu, ustawienia środowiska i reguły omijania, w tym specjalną obsługę pętli zwrotnej. ProxyURL zwraca podany URL proxy dla każdego żądania przekazanego do tej funkcji wyboru.

Osobny transport z jawnym ProxyURL może więc przesłać żądanie do lokalnego celu przez proxy. Ma to sens tylko wtedy, gdy proxy może w uprawniony sposób dotrzeć do żądanego celu. localhost zdalnego proxy nie jest localhost twojego laptopa, więc wymuszenie trasy nie jest automatycznie użytecznym testem łączności.

Sprawdź, zanim proces zapisze środowisko w pamięci podręcznej

Konfiguracja proxy ze środowiska w standardowym net/http jest buforowana po pierwszym użyciu. Późniejsza zmiana zmiennej środowiskowej wewnątrz tego samego działającego programu nie jest niezawodnym sposobem ponowienia testu z nową konfiguracją. Uruchom nowy proces z zamierzonymi wartościami albo podaj jawną funkcję wyboru, której zachowanie kontrolujesz.

To zachowanie pętli zwrotnej dotyczy standardowego mechanizmu wyboru proxy w Go 1.27.3. Inne języki i klienty HTTP mogą stosować inne reguły routingu dla localhost.

Powiązane artykuły