Préserver l'état de la requête lors de l'inspection du corps avec HTTP.Handler
Dans le contexte de l'implémentation d'un gestionnaire HTTP, accéder au corps de la requête à l'aide de méthodes telles que req.ParseForm() peut créer un dilemme. Bien qu'une telle inspection soit souvent nécessaire, elle peut épuiser le flux corporel de la requête, le rendant inutilisable pour les gestionnaires ultérieurs (par exemple, les proxys inverses).
Le problème : le flux corporel drainé
Lorsque le corps de la requête est consommé par l'appel de méthodes telles que req.ParseForm(), le flux req.Body.Reader est vidé, ne laissant aucune donnée restante pour l'aval. gestionnaires. Cela entraîne des erreurs lors du transfert par proxy, car la longueur attendue du corps de la requête ne correspond plus à l'état épuisé.
La solution : diviser le flux de corps
Pour surmonter ce défi , une technique impliquant une couche tampon peut être utilisée. En lisant le corps de la requête dans un tampon et en utilisant ce tampon pour créer plusieurs nouveaux lecteurs, nous pouvons séparer l'inspection du flux du corps d'origine.
Étapes :
Exemple :
buf, _ := io.ReadAll(r.Body) rdr1 := io.NopCloser(bytes.NewBuffer(buf)) rdr2 := io.NopCloser(bytes.NewBuffer(buf)) doStuff(rdr1) r.Body = rdr2
Avantages :
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!