Maison > développement back-end > Golang > Comment puis-je inspecter et conserver le corps d'une requête HTTP pour la gestion du proxy inverse ?

Comment puis-je inspecter et conserver le corps d'une requête HTTP pour la gestion du proxy inverse ?

Barbara Streisand
Libérer: 2024-12-15 22:57:15
original
781 Les gens l'ont consulté

How Can I Inspect and Preserve an HTTP Request Body for Reverse Proxy Handling?

Préserver les corps de requête pour la gestion du proxy inverse

Dans certains scénarios, lors de l'inspection des requêtes HTTP dans un http.Handler personnalisé, cela peut être nécessaire pour examiner le corps de la demande, mais également pour conserver la demande d'origine pour un traitement ultérieur, par exemple en la transmettant à un gestionnaire de proxy inverse. Pour y parvenir, envisagez l'approche suivante :

Le problème survient lorsque le corps de la requête est vidé lors de l'inspection, ne laissant rien aux consommateurs ultérieurs comme le proxy inverse. Pour contourner ce problème, vous pouvez lire le corps de la requête dans un tampon, puis créer deux nouveaux lecteurs soutenus par ce tampon :

  1. Créer un tampon : Utilisez io.ReadAll( r.Body) pour lire le corps de la requête dans un tampon []byte. Cette opération draine le corps de la requête d'origine.
  2. Créer deux lecteurs : Utilisez io.NopCloser(bytes.NewBuffer(buf)) pour créer deux nouveaux lecteurs (rdr1 et rdr2) soutenus par le même tampon. Ces lecteurs vous permettront d'accéder au corps plusieurs fois sans affecter la demande initiale.
  3. Utilisez le nouveau lecteur : Effectuez vos inspections à l'aide de rdr1.
  4. Réinitialiser Corps de la requête : Définissez le corps de la requête (r.Body) sur rdr2 (encapsulé dans io.NopCloser) pour le réinitialiser à son état d'origine. État. Cela permet au proxy inverse de traiter la demande comme si le corps n'avait pas été vidé.

En utilisant cette approche, vous pouvez inspecter le corps de la demande, effectuer les actions nécessaires et toujours transmettre la demande d'origine sans modification. le proxy inverse, évitant les erreurs.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal