Perte de signal d'annulation de contexte dans les requêtes HTTP avec corps
Lors du développement d'un serveur HTTP en Go, une préoccupation est apparue : le contexte.Terminé( ) n'a pas réussi à capturer les signaux de déconnexion du client pour les requêtes comportant un corps. Ce comportement différait des requêtes GET, qui détectaient avec succès les départs de clients.
Cause sous-jacente
Cette incohérence provient du fonctionnement du serveur net/http. Son mécanisme de vérification de connexion ne démarre que lorsque l'application lit le corps de la requête. Étant donné que les requêtes GET n'ont pas de corps, la vérification de la connexion se déclenche immédiatement, permettant au serveur de détecter rapidement l'annulation du client. Cependant, pour les requêtes POST, le serveur attend que le corps soit lu avant de commencer les vérifications de connexion.
Solution
Pour résoudre ce problème, il est nécessaire de lire manuellement le corps de la requête pour stimuler le processus de vérification de la connexion du serveur. L'extrait de code suivant le démontre :
func handler(w http.ResponseWriter, r *http.Request) { go func(doneEn lisant explicitement le corps de la requête, le serveur peut détecter rapidement les déconnexions des clients, même pour les requêtes comportant un corps. Cela permet un nettoyage approprié et une libération des ressources côté serveur.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3