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
Libérer: 2024-12-17 07:55:25
original
181 Les gens l'ont consulté

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

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal