Waarom Go die instaanbediener vir localhost omseil
Onderskei Go se ingeboude teruglusuitsondering van NO_PROXY en vergelyk omgewingsroetering met ’n eksplisiete ProxyURL.
Go se omgewingsgebaseerde instaanbedienerkieser het ’n ingeboude uitsondering vir localhost en teruglus-IP-bestemmings. Om NO_PROXY leeg te maak, verwyder nie dié uitsondering nie. Dit kan veroorsaak dat ’n plaaslike toets direk verbind terwyl ’n versoek na ’n openbare gasheernaam die instaanbediener soos verwag gebruik.
Die reël geld vir die versoek se bestemming. Dit keer jou nie om ’n instaanbedienerluisteraar te gebruik waarvan die eie adres 127.0.0.1 is nie.
Ondersoek die kieser sonder om ’n versoek te stuur
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)
}
}
As jy die vergelyking met die omgewing wil sien, voer die program uit met die instaanbedienerveranderlikes vir die proses gestel. Die program evalueer slegs die kiesers; dit verbind nie met die dokumentasie-instaanbediener of enige van die bestemmings nie.
Omgewingsontdekking en ’n eksplisiete kieser is verskillende beleide
ProxyFromEnvironment neem die bestemmingskema, omgewingsinstellings en omseilreëls in ag, insluitend die spesiale teruglushantering. ProxyURL gee die verskafte instaanbediener-URL terug vir elke versoek wat aan daardie kieser deurgegee word.
’n Toegewyde transport met ’n eksplisiete ProxyURL kan dus ’n versoek na ’n plaaslike bestemming deur ’n instaanbediener stuur. Dit is slegs nuttig wanneer die instaanbediener die aangevraagde bestemming regmatig kan bereik. ’n Afgeleë instaanbediener se localhost is nie jou skootrekenaar se localhost nie; die afdwing van die roete is dus nie vanself ’n nuttige verbindingstoets nie.
Kontroleer voordat die proses sy omgewing gekas het
Die standaard-net/http se omgewingsgebaseerde instaanbedieneropstelling word ná die eerste gebruik gekas. Om later ’n omgewingsveranderlike in dieselfde lopende program te verander, is nie ’n betroubare manier om ’n toets met ’n vars opstelling te herhaal nie. Begin ’n nuwe proses met die bedoelde waardes of verskaf ’n eksplisiete kieser waarvan jy die gedrag beheer.
Hierdie teruglusgedrag geld vir Go 1.27.3 se standaard-instaanbedienerkieser. Ander tale en HTTP-kliënte kan ander localhost-roeteringsreëls gebruik.