O selector de proxy polo contorno de Go ten unha excepción integrada para localhost e os destinos con IP de bucle local. Baleirar NO_PROXY non elimina esa excepción. Por iso, unha proba local pode conectarse directamente mentres unha petición a un nome de servidor público usa o proxy como se espera.

A regra refírese ao destino da petición. Non impide usar un punto de escoita de proxy cuxo propio enderezo sexa 127.0.0.1.

Inspecciona o selector sen enviar unha petición

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

Se queres observar a comparación co contorno, executa o programa coas variables de proxy definidas para o proceso. O programa só avalía os selectores; non se conecta ao proxy de documentación nin a ningún dos destinos.

O descubrimento polo contorno e un selector explícito son políticas diferentes

ProxyFromEnvironment ten en conta o esquema do destino, os axustes do contorno e as regras de exclusión, incluído o tratamento especial do bucle local. ProxyURL devolve o URL de proxy proporcionado para cada petición que se lle pasa a ese selector.

Así, un transporte dedicado cun ProxyURL explícito pode enviar unha petición a un destino local a través dun proxy. Só resulta útil cando o proxy pode chegar de forma lexítima ao destino solicitado. O localhost dun proxy remoto non é o localhost do teu portátil, polo que forzar a ruta non é automaticamente unha proba de conectividade útil.

Comproba antes de que o proceso garde o contorno na caché

A configuración de proxy polo contorno do net/http estándar gárdase na caché despois do primeiro uso. Cambiar máis tarde unha variable de contorno no mesmo programa en execución non é unha forma fiable de repetir unha proba cunha configuración nova. Inicia un proceso novo cos valores previstos ou proporciona un selector explícito cuxo comportamento controles.

Este comportamento de bucle local aplícase ao selector de proxy estándar de Go 1.27.3. Outras linguaxes e clientes HTTP poden usar regras de encamiñamento de localhost diferentes.

Artigos relacionados