Mengapa Go memintas proksi untuk localhost
Bezakan pengecualian loopback terbina dalam Go daripada NO_PROXY dan bandingkan penghalaan melalui persekitaran dengan ProxyURL yang jelas.
Pemilih proksi berasaskan persekitaran Go mempunyai pengecualian terbina dalam untuk localhost dan destinasi IP loopback. Mengosongkan NO_PROXY tidak membuang pengecualian itu. Oleh itu, ujian setempat boleh bersambung terus sedangkan permintaan ke nama hos awam menggunakan proksi seperti yang dijangka.
Peraturan ini berkaitan dengan destinasi permintaan. Ia tidak menghalang penggunaan pendengar proksi yang alamatnya sendiri ialah 127.0.0.1.
Periksa pemilih tanpa menghantar permintaan
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)
}
}
Jika mahu melihat perbandingan dengan persekitaran, jalankan program dengan pemboleh ubah proksi ditetapkan untuk proses tersebut. Program hanya menilai pemilih; ia tidak bersambung ke proksi dokumentasi atau mana-mana destinasi.
Penemuan melalui persekitaran dan pemilih yang jelas ialah dasar berbeza
ProxyFromEnvironment mempertimbangkan skema destinasi, tetapan persekitaran dan peraturan pintasan, termasuk pengendalian khas loopback. ProxyURL mengembalikan URL proksi yang dibekalkan bagi setiap permintaan yang dihantar kepada pemilih itu.
Oleh itu, pengangkutan khusus dengan ProxyURL yang jelas boleh menghantar permintaan ke destinasi setempat melalui proksi. Ini hanya berguna jika proksi boleh mencapai destinasi yang diminta secara sah. localhost proksi jauh bukan localhost komputer riba anda, maka memaksa laluan tidak secara automatik menjadi ujian ketersambungan yang berguna.
Periksa sebelum proses menyimpan persekitarannya dalam cache
Konfigurasi proksi berasaskan persekitaran dalam net/http standard dicache selepas penggunaan pertama. Mengubah pemboleh ubah persekitaran kemudian dalam program sama yang masih berjalan bukan cara yang boleh dipercayai untuk mengulangi ujian konfigurasi baharu. Mulakan proses baharu dengan nilai yang dikehendaki, atau bekalkan pemilih yang jelas dan tingkah lakunya anda kawal.
Tingkah laku loopback ini terpakai kepada pemilih proksi standard Go 1.27.3. Bahasa dan klien HTTP lain boleh menggunakan peraturan penghalaan localhost yang berbeza.