Maison > développement back-end > Golang > Pourquoi mon Go HandleFunc est-il déclenché deux fois par requête du navigateur ?

Pourquoi mon Go HandleFunc est-il déclenché deux fois par requête du navigateur ?

Mary-Kate Olsen
Libérer: 2024-12-26 02:20:09
original
697 Les gens l'ont consulté

Why is my Go HandleFunc Triggered Twice per Browser Request?

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)
}
Copier après la connexion

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!

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