El selector de servidor intermediari basat en l’entorn de Go té una excepció integrada per a localhost i les destinacions amb IP de bucle local. Buidar NO_PROXY no elimina aquesta excepció. Això pot fer que una prova local vagi directament mentre una petició a un nom d’amfitrió públic utilitza el servidor intermediari com s’espera.

La regla afecta la destinació de la petició. No impedeix utilitzar un punt d’escolta de servidor intermediari que tingui com a adreça pròpia 127.0.0.1.

Inspecciona el selector sense enviar cap petició

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

Si vols observar la comparació amb l’entorn, executa el programa amb les variables de servidor intermediari definides per al procés. El programa només avalua els selectors; no es connecta al servidor intermediari de documentació ni a cap de les destinacions.

La descoberta per l’entorn i un selector explícit segueixen polítiques diferents

ProxyFromEnvironment té en compte l’esquema de destinació, la configuració de l’entorn i les regles d’exclusió, inclòs el tractament especial del bucle local. ProxyURL retorna l’URL de servidor intermediari proporcionat per a cada petició passada a aquest selector.

Per tant, un transport dedicat amb un ProxyURL explícit pot enviar una petició a una destinació local a través d’un servidor intermediari. Això només és útil quan el servidor intermediari pot arribar legítimament a la destinació sol·licitada. El localhost d’un servidor intermediari remot no és el localhost del teu portàtil; per això, forçar la ruta no és automàticament una prova de connectivitat útil.

Comprova-ho abans que el procés desi l’entorn a la memòria cau

La configuració de servidor intermediari de l’entorn del net/http estàndard es desa a la memòria cau després del primer ús. Canviar més tard una variable d’entorn dins del mateix programa en execució no és una manera fiable de repetir una prova amb una configuració nova. Inicia un procés nou amb els valors previstos o proporciona un selector explícit del qual controlis el comportament.

Aquest comportament de bucle local s’aplica al selector de servidor intermediari estàndard de Go 1.27.3. Altres llenguatges i clients HTTP poden utilitzar regles d’encaminament de localhost diferents.

Articles relacionats