Heim >Backend-Entwicklung >Golang >Warum wird mein Go-HTTP-Funktionshandler zweimal aufgerufen?

Warum wird mein Go-HTTP-Funktionshandler zweimal aufgerufen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-15 09:27:14507Durchsuche

Why is my Go HTTP function handler called twice?

HTTP-Funktionshandler wird unerwartet aufgerufen

Bei der Verwendung von HTTP-Handlern in Go ist es wichtig zu verstehen, wie Anfragen verarbeitet werden. In einem häufigen Szenario stellt ein Browser nicht nur eine Anfrage an die Stamm-URL, sondern fordert zu visuellen Zwecken auch eine Symboldatei mit dem Namen „/favicon.ico“ an. Diese zusätzliche Anfrage kann dazu führen, dass eine Handler-Funktion zweimal aufgerufen wird.

Beispiel:

Betrachten Sie den folgenden Code, der bei jedem Seitenbesuch einen Zähler erhöht:

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)
}

Beobachtung:

Wenn Sie auf den Hafen zugreifen 8000 in einem Webbrowser, werden Sie feststellen, dass der „Hallo“-Handler zweimal aufgerufen wird. Dies liegt daran, dass der Browser auch eine Anfrage nach „/favicon.ico“ stellt. Wenn Sie cURL verwenden, um auf dieselbe URL zuzugreifen, wird der Handler nur einmal aufgerufen.

Um dieses Problem zu verstehen und zu beheben, protokollieren Sie einfach die Anfragen. Sie werden sehen, dass die zweite Anfrage für „/favicon.ico“ gilt. Um dies zu vermeiden, können Sie entweder:

  • Erstellen Sie einen Handler speziell für „/favicon.ico“ und stellen Sie ein Platzhaltersymbol oder Favicon bereit.
  • Konfigurieren Sie Ihren HTTP-Server so, dass er „/“ ignoriert. favicon.ico"-Anfragen.

Das Verständnis des HTTP-Anfrageflusses und die Berücksichtigung spezifischer Randfälle wird Ihnen beim Schreiben robuster und zuverlässiger Webserver helfen Los.

Das obige ist der detaillierte Inhalt vonWarum wird mein Go-HTTP-Funktionshandler zweimal aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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