HandleFunc déclenché plusieurs fois : enquête et résolution
Dans le contexte d'un serveur Web, la fonction HandleFunc joue un rôle crucial dans la gestion des messages entrants. Requêtes HTTP. Cependant, un problème courant qui peut survenir est que la fonction est appelée deux fois pour une seule requête. Ce comportement peut être particulièrement problématique si votre programme repose sur l'incrémentation d'un compteur ou sur l'exécution d'actions basées sur le nombre de requêtes.
Explorons le problème présenté par l'extrait de code fourni. Lors du chargement du port 8000 dans un navigateur Web, la fonction hello est invoquée deux fois. La nature déroutante de ce comportement devient évidente lors de l'utilisation de curl, qui n'appelle la fonction qu'une seule fois.
Lors de la configuration d'un mécanisme de journalisation dans le code, vous découvrirez que le navigateur demande également /favicon.ico. Cette demande est initiée par le navigateur pour afficher une petite icône ou un logo représentant le site Web dans l'onglet ou la barre d'adresse.
La solution au problème réside dans l'accusé de réception de la demande de favicon et dans son traitement approprié. Voici une version mise à jour du code qui répond à ce besoin :
package main import ( "fmt" "io" "log" "net/http" ) func hello(w http.ResponseWriter, r *http.Request) { if r.RequestURI == "/favicon.ico" { w.WriteHeader(http.StatusNotFound) return } io.WriteString(w, "Hello world!") log.Println("hello.") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) http.ListenAndServe(":8000", mux) }
Cette modification garantit que la demande de favicon est traitée correctement, ce qui fait que la fonction hello n'est appelée qu'une seule fois pour chaque demande de page Web.
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!