Kāpēc Go apiet starpniekserveri localhost gadījumā
Atšķiriet Go iebūvēto loopback izņēmumu no NO_PROXY un salīdziniet vides maršrutēšanu ar skaidri norādītu ProxyURL.
Go vides starpniekservera atlasītājā ir iebūvēts izņēmums localhost un loopback IP mērķiem. NO_PROXY iztukšošana šo izņēmumu nenoņem. Tāpēc lokāls tests var savienoties tieši, kamēr pieprasījums publiskam resursdatora nosaukumam izmanto starpniekserveri, kā paredzēts.
Noteikums attiecas uz pieprasījuma mērķi. Tas neliedz izmantot starpniekservera klausītāju, kura paša adrese ir 127.0.0.1.
Pārbaudiet atlasītāju, nesūtot pieprasījumu
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)
}
}
Ja vēlaties redzēt salīdzinājumu ar vidi, palaidiet programmu ar procesam iestatītiem starpniekservera mainīgajiem. Programma tikai novērtē atlasītājus; tā nesavienojas ar dokumentācijas starpniekserveri vai jebkuru no mērķiem.
Noteikšana no vides un skaidri norādīts atlasītājs ir atšķirīgas politikas
ProxyFromEnvironment ņem vērā mērķa shēmu, vides iestatījumus un apiešanas noteikumus, tostarp īpašo loopback apstrādi. ProxyURL atgriež norādīto starpniekservera URL katram šim atlasītājam nodotajam pieprasījumam.
Tādēļ atsevišķs transports ar skaidri norādītu ProxyURL var sūtīt pieprasījumu lokālam mērķim caur starpniekserveri. Tas ir noderīgi tikai tad, ja starpniekserveris var likumīgi sasniegt pieprasīto mērķi. Attāla starpniekservera localhost nav jūsu klēpjdatora localhost, tāpēc piespiedu maršruts automātiski nekļūst par noderīgu savienojamības testu.
Pārbaudiet, pirms process ir saglabājis vidi kešatmiņā
Standarta net/http vides starpniekservera konfigurācija tiek saglabāta kešatmiņā pēc pirmās lietošanas. Vides mainīgā vēlāka maiņa tajā pašā strādājošajā programmā nav uzticams veids, kā atkārtot testu ar jaunu konfigurāciju. Sāciet jaunu procesu ar vēlamajām vērtībām vai nodrošiniet skaidri norādītu atlasītāju, kura darbību kontrolējat.
Šī loopback darbība attiecas uz Go 1.27.3 standarta starpniekservera atlasītāju. Citas valodas un HTTP klienti var izmantot atšķirīgus localhost maršrutēšanas noteikumus.