Maison > développement back-end > Golang > le corps du texte

Comment définir en toute sécurité des valeurs de contexte dans les gestionnaires HTTP dans Go ?

Linda Hamilton
Libérer: 2024-11-15 07:54:02
original
415 Les gens l'ont consulté

How to Safely Set Context Values within HTTP Handlers in Go?

Définition des valeurs de contexte dans les gestionnaires HTTP

Dans le package HTTP de Go, la fonction HandleFunc permet d'enregistrer une fonction de gestionnaire pour traiter les requêtes HTTP entrantes. Bien que la définition de valeurs de contexte dans un gestionnaire soit une pratique courante, la détermination de l'approche optimale peut soulever des préoccupations.

Une approche consiste à utiliser la fonction WithValue du package de contexte pour définir une valeur de contexte dans un gestionnaire. Cependant, il est important de noter que l'utilisation suivante peut introduire un problème potentiel :

func setValue(r *http.Request, val string) {
  ctx := context.WithValue(r.Context(), myContext, val)
  *r = *r.WithContext(ctx)
}
Copier après la connexion

L'attribution de *r à un nouvel objet de requête peut amener le code de la pile à utiliser une valeur de contexte incorrecte. Pour résoudre ce problème, l'approche recommandée consiste à créer une copie superficielle de la requête à l'aide de WithContext et à renvoyer un pointeur vers celle-ci :

func setValue(r *http.Request, val string) *http.Request {
  return r.WithContext(context.WithValue(r.Context(), myContext, val))
}
Copier après la connexion

En renvoyant un pointeur vers la copie superficielle, vous vous assurez que la valeur de contexte correcte est utilisé tout au long du pipeline de traitement des demandes. Si le gestionnaire appelle d'autres gestionnaires, transmettez la requête modifiée au gestionnaire suivant :

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
  r = setValue(r, "foobar")
  someOtherHandler.ServeHTTP(w, r)
})
Copier après la connexion

Cette approche définit efficacement les valeurs de contexte dans les gestionnaires HTTP tout en évitant les pièges potentiels associés à la modification de l'objet de requête 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!

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