Kial Go preteriras prokurilon por localhost
Distingu la enkonstruitan loopback-escepton de Go disde NO_PROXY kaj komparu median vojigon kun eksplicita ProxyURL.
La media prokurilelektilo de Go havas enkonstruitan escepton por localhost kaj loopback-IP-celoj. Malplenigi NO_PROXY ne forigas tiun escepton. Pro tio loka provo povas konektiĝi rekte, dum peto al publika gastigantonomo uzas la prokurilon laŭatende.
La regulo koncernas la celon de la peto. Ĝi ne malhelpas vin uzi prokurilan aŭskultilon, kies propra adreso estas 127.0.0.1.
Ekzamenu la elektilon sen sendi peton
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 vi volas vidi la komparon kun la medio, rulu la programon kun prokurilaj variabloj agorditaj por la procezo. La programo nur taksas la elektilojn; ĝi ne konektiĝas al la dokumenta prokurilo aŭ al iu ajn el la celoj.
Malkovro el la medio kaj eksplicita elektilo estas malsamaj politikoj
ProxyFromEnvironment konsideras la celan skemon, mediajn agordojn kaj preterirajn regulojn, inkluzive de la speciala loopback-traktado. ProxyURL redonas la provizitan prokurilan URL por ĉiu peto transdonita al tiu elektilo.
Do aparta transporto kun eksplicita ProxyURL povas sendi peton al loka celo tra prokurilo. Tio utilas nur kiam la prokurilo povas laŭrajte atingi la petitan celon. localhost de fora prokurilo ne estas localhost de via tekkomputilo, do devigi la vojon ne aŭtomate estas utila konekteca provo.
Kontrolu antaŭ ol la procezo kaŝmemorigas sian medion
La media prokurila agordaro de la norma net/http estas kaŝmemorigata post la unua uzo. Poste ŝanĝi median variablon ene de la sama rulanta programo ne estas fidinda maniero ripeti provon kun freŝa agordaro. Lanĉu novan procezon kun la intencitaj valoroj aŭ provizu eksplicitan elektilon, kies konduton vi regas.
Tiu loopback-konduto validas por la norma prokurilelektilo de Go 1.27.3. Aliaj lingvoj kaj HTTP-klientoj povas uzi malsamajn vojigajn regulojn por localhost.