Maison >développement back-end >Golang >Pourquoi mon gestionnaire de fonctions Go HTTP est-il appelé deux fois ?
Gestionnaire de fonctions HTTP appelé de manière inattendue
Lors de l'utilisation de gestionnaires HTTP dans Go, il est crucial de comprendre comment les requêtes sont traitées. Dans un scénario courant, un navigateur envoie non seulement une requête à l'URL racine, mais demande également un fichier icône nommé "/favicon.ico" à des fins visuelles. Cette requête supplémentaire peut conduire à l'appel d'une fonction de gestionnaire deux fois.
Exemple :
Considérez le code suivant qui incrémente un compteur à chaque visite de page :
package main import ( "fmt" "io" "log" "net/http" ) var counter int func hello(w http.ResponseWriter, r *http.Request) { counter++ io.WriteString(w, fmt.Sprintf("Hello world! Counter: %d", counter)) log.Println("hello.") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", hello) http.ListenAndServe(":8000", mux) }
Observation :
Si vous accédez au port 8000 en un navigateur Web, vous remarquerez que le gestionnaire "hello" est appelé deux fois. En effet, le navigateur demande également "/favicon.ico". Si vous utilisez cURL pour accéder à la même URL, le gestionnaire n'est appelé qu'une seule fois.
Pour comprendre et résoudre ce problème, enregistrez simplement les requêtes. Vous verrez que la deuxième requête concerne "/favicon.ico". Pour éviter cela, vous pouvez soit :
Comprendre le flux de requêtes HTTP et prendre en compte les cas extrêmes spécifiques vous aidera à écrire des serveurs Web robustes et fiables avec Allez-y.
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!