Maison >développement back-end >Golang >Pourquoi mon Go HandleFunc est-il invoqué deux fois lorsqu'il est accessible via un navigateur Web ?

Pourquoi mon Go HandleFunc est-il invoqué deux fois lorsqu'il est accessible via un navigateur Web ?

DDD
DDDoriginal
2024-12-17 07:55:25180parcourir

Why is my Go HandleFunc invoked twice when accessed via a web browser?

HandleFunc invoqué deux fois

Dans un exemple simple de serveur Web Go, un problème déroutant survient lorsque HandleFunc est appelé deux fois lors de l'accès au port 8000 via un navigateur Internet. Cela diffère du comportement attendu lors de l'utilisation de curl, qui ne déclenche qu'un seul appel.

Dévoilement du problème

Lors de l'implémentation d'une instruction de journalisation pour résoudre le problème, il devient Il est évident qu'une demande supplémentaire est faite par le navigateur pour /favicon.ico. Cette icône est généralement affichée dans la barre d'adresse du navigateur.

Résolution

Pour résoudre cette incompatibilité dans le traitement de la demande, accusez simplement réception de la demande de /favicon.ico dans le HandleFunc. Si aucune action n'est nécessaire pour cette requête spécifique, une réponse vide par défaut peut suffire.

Voici le code modifié :

package main

import (
    "io"
    "log"
    "net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
    io.WriteString(w, "Hello world!")
    log.Println("hello.")
}

func favicon(w http.ResponseWriter, r *http.Request) {
    http.NotFound(w, r)
}

func main() {
    mux := http.NewServeMux()
    mux.HandleFunc("/", hello)
    mux.HandleFunc("/favicon.ico", favicon)
    http.ListenAndServe(":8000", mux)
}

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!

Déclaration:
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