Maison >développement back-end >Golang >Comment puis-je préserver l'intégrité du corps de la requête HTTP lors du proxy inverse ?
Problème :
Dans un gestionnaire HTTP personnalisé implémentant la méthode ServeHTTP, l'inspection du corps des requêtes POST entrantes à l'aide de req.ParseForm() provoque une erreur lorsque la requête est transmise à un proxy inverse. Cela se produit parce que la lecture du corps draine le flux req.Body.Reader, ne laissant rien aux consommateurs suivants.
Solution :
Pour conserver l'état de la demande d'origine tout en examinant le body, envisagez la technique suivante :
Exemple de code :
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2 // Resets the request body without consuming any data
Remarque :
bytes.Buffer n'implémente pas l'interface io.ReadCloser en raison de l'absence de méthode Close() ; par conséquent, chaque lecteur est enveloppé dans io.NopCloser.
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!