ホームページ > バックエンド開発 > Golang > Web ブラウザ経由でアクセスすると Go HandleFunc が 2 回呼び出されるのはなぜですか?

Web ブラウザ経由でアクセスすると Go HandleFunc が 2 回呼び出されるのはなぜですか?

DDD
リリース: 2024-12-17 07:55:25
オリジナル
183 人が閲覧しました

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

HandleFunc Invoked Twice

単純な Go Web サーバーの例では、ポート 8000 にアクセスするときに HandleFunc が 2 回呼び出されるという不可解な問題が発生します。ウェブブラウザ。これは、単一の呼び出しのみをトリガーする、curl 使用時の予期される動作とは異なります。

問題の解明

問題をトラブルシューティングするためにログ ステートメントを実装すると、次のようになります。 /favicon.ico に対して追加のリクエストがブラウザによって行われたことが明らかです。このアイコンは通常、ブラウザのアドレス バーに表示されます。

解決策

リクエスト処理におけるこの不一致を解決するには、単に /favicon.ico のリクエストを承認します。 HandleFunc。この特定のリクエストにアクションが必要ない場合は、デフォルトの空のレスポンスで十分です。

変更されたコードは次のとおりです:

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)
}
ログイン後にコピー

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート