ホームページ >バックエンド開発 >Golang >Go HandleFunc がブラウザーリクエストごとに 2 回トリガーされるのはなぜですか?

Go HandleFunc がブラウザーリクエストごとに 2 回トリガーされるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-26 02:20:09698ブラウズ

Why is my Go HandleFunc Triggered Twice per Browser Request?

HandleFunc が複数回トリガーされる: 調査と解決

Web サーバーのコンテキストでは、HandleFunc 関数は受信処理において重要な役割を果たします。 HTTP リクエスト。ただし、発生する可能性のある一般的な問題は、1 つのリクエストに対して関数が 2 回呼び出されることです。この動作は、プログラムがカウンターの増加やリクエスト数に基づいたアクションの実行に依存している場合に特に問題となる可能性があります。

提供されているコード スニペットで示されている問題を詳しく見てみましょう。 Web ブラウザにポート 8000 をロードすると、hello 関数が 2 回呼び出されます。この動作の複雑な性質は、関数を 1 回だけ呼び出すカールを使用すると明らかになります。

コード内でログ記録メカニズムを設定すると、ブラウザーが /favicon.ico も要求していることがわかります。このリクエストは、タブまたはアドレス バーに Web サイトを表す小さなアイコンまたはロゴを表示するためにブラウザによって開始されます。

問題の解決策は、ファビコンのリクエストを認識し、それを適切に処理することにあります。このニーズに対応するコードの更新バージョンは次のとおりです。

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

この変更により、favicon リクエストが適切に処理されるようになり、Web ページ リクエストごとに hello 関数が 1 回だけ呼び出されるようになります。

以上がGo HandleFunc がブラウザーリクエストごとに 2 回トリガーされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。