Heim > Backend-Entwicklung > Golang > Warum wird mein Go HandleFunc zweimal aufgerufen, wenn über einen Webbrowser darauf zugegriffen wird?

Warum wird mein Go HandleFunc zweimal aufgerufen, wenn über einen Webbrowser darauf zugegriffen wird?

DDD
Freigeben: 2024-12-17 07:55:25
Original
185 Leute haben es durchsucht

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

HandleFunc zweimal aufgerufen

In einem einfachen Go-Webserver-Beispiel tritt ein rätselhaftes Problem auf, bei dem HandleFunc beim Zugriff auf Port 8000 zweimal aufgerufen wird ein Webbrowser. Dies unterscheidet sich vom erwarteten Verhalten bei Verwendung von Curl, das nur einen einzigen Aufruf auslöst.

Enthüllung des Problems

Nach der Implementierung einer Protokollierungsanweisung zur Behebung des Problems wird es Es ist ersichtlich, dass vom Browser eine zusätzliche Anfrage für /favicon.ico gestellt wird. Dieses Symbol wird normalerweise in der Adressleiste des Browsers angezeigt.

Lösung

Um diese Diskrepanz bei der Anfrageverarbeitung zu beheben, bestätigen Sie einfach die Anfrage für /favicon.ico in die HandleFunc. Wenn für diese spezielle Anfrage keine Aktion erforderlich ist, kann eine standardmäßige leere Antwort ausreichen.

Hier ist der geänderte Code:

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum wird mein Go HandleFunc zweimal aufgerufen, wenn über einen Webbrowser darauf zugegriffen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage