Maison >développement back-end >Golang >Comment puis-je transférer les requêtes HTTP entrantes vers un autre serveur dans Go ?
Transmettre les requêtes HTTP entrantes vers un autre serveur dans Go
Dans le cadre de migration de services, il est souvent nécessaire de transmettre les requêtes vers des versions différentes d'une demande. Ceci peut être réalisé en copiant la requête HTTP entrante et en l'envoyant à la cible souhaitée.
Cependant, les tentatives de transfert direct de la requête originale à l'aide de req.URL.Host et req.Host entraîneront l'erreur "http : Request.RequestURI ne peut pas être défini dans les requêtes des clients." Pour surmonter ce problème, une approche plus globale est nécessaire.
Une méthode efficace consiste à utiliser les principes du proxy inverse, comme illustré dans net/http/httputil. En créant une nouvelle demande et en copiant sélectivement les parties requises, nous pouvons transférer la demande efficacement.
Voici un exemple de mise en œuvre :
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 }
En utilisant cette approche, vous pouvez transférer efficacement le HTTP entrant requêtes vers plusieurs destinations, permettant des transitions fluides lors des migrations de services ou d'autres scénarios nécessitant une redirection des requêtes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!