Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Majukan Permintaan HTTP Masuk ke Pelayan Lain dalam Go?
Menyalurkan Permintaan HTTP Masuk ke Pelayan Lain dalam Go
Dalam konteks pemindahan perkhidmatan, selalunya perlu untuk memajukan permintaan kepada versi yang berbeza sesuatu permohonan. Ini boleh dicapai dengan menyalin permintaan HTTP yang masuk dan menghantarnya ke sasaran yang dikehendaki.
Walau bagaimanapun, percubaan untuk memajukan terus permintaan asal menggunakan req.URL.Host dan req.Host akan mengakibatkan ralat "http : Request.RequestURI tidak boleh ditetapkan dalam permintaan pelanggan." Untuk mengatasinya, pendekatan yang lebih komprehensif diperlukan.
Satu kaedah yang berkesan ialah menggunakan prinsip proksi terbalik, seperti yang ditunjukkan dalam net/http/httputil. Dengan mencipta permintaan baharu dan menyalin bahagian yang diperlukan secara terpilih, kami boleh memajukan permintaan itu dengan berkesan.
Berikut ialah contoh pelaksanaan:
func handler(w http.ResponseWriter, req *http.Request) { // Buffer the request body to preserve its contents body, err := ioutil.ReadAll(req.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } req.Body = ioutil.NopCloser(bytes.NewReader(body)) // Construct the target URL from the original request url := fmt.Sprintf("%s://%s%s", proxyScheme, proxyHost, req.RequestURI) // Create the new request with the modified URL and buffered body proxyReq, err := http.NewRequest(req.Method, url, bytes.NewReader(body)) // Selectively copy relevant headers proxyReq.Header = make(http.Header) for h, val := range req.Header { proxyReq.Header[h] = val } // Execute the request through the HTTP client resp, err := httpClient.Do(proxyReq) if err != nil { http.Error(w, err.Error(), http.StatusBadGateway) return } defer resp.Body.Close() // Forward the response back to the original request }
Dengan menggunakan pendekatan ini, anda boleh memajukan HTTP masuk dengan cekap permintaan ke berbilang destinasi, membolehkan peralihan yang lancar semasa migrasi perkhidmatan atau senario lain yang memerlukan ubah hala permintaan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Majukan Permintaan HTTP Masuk ke Pelayan Lain dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!