Maison >développement back-end >Golang >Comment dupliquer des requêtes HTTP sur plusieurs serveurs dans Go pour des transitions de serveur transparentes ?
Duplication des requêtes HTTP vers plusieurs serveurs dans Go
Lors de la transition d'une version de serveur à une autre, il peut être souhaitable de dupliquer les requêtes HTTP entrantes vers les deux versions pour un transfert transparent. Cependant, l'approche naïve consistant à modifier directement la requête se heurte à une erreur.
Pour résoudre ce problème, la solution consiste à créer une nouvelle requête HTTP et à copier les parties nécessaires de la requête entrante. Cela implique :
Voici un exemple de code :
func handler(w http.ResponseWriter, req *http.Request) { body, err := ioutil.ReadAll(req.Body) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } req.Body = ioutil.NopCloser(bytes.NewReader(body)) url := fmt.Sprintf("%s://%s%s", proxyScheme, proxyHost, req.RequestURI) proxyReq, err := http.NewRequest(req.Method, url, bytes.NewReader(body)) proxyReq.Header = make(http.Header) for h, val := range req.Header { proxyReq.Header[h] = val } resp, err := httpClient.Do(proxyReq) if err != nil { http.Error(w, err.Error(), http.StatusBadGateway) return } defer resp.Body.Close() // legacy code }
Cette approche garantit que les versions anciennes et nouvelles du serveur reçoivent des demandes en double sans modifier la demande d'origine.
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!