首頁 >後端開發 >Golang >為什麼每個瀏覽器請求都會觸發我的 Go HandleFunc 兩次?

為什麼每個瀏覽器請求都會觸發我的 Go HandleFunc 兩次?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-26 02:20:09694瀏覽

Why is my Go HandleFunc Triggered Twice per Browser Request?

HandleFunc 多次觸發:調查和解決

在Web 伺服器的上下文中,HandleFunc 函數在處理傳入資料方面起著至關重要的作用HTTP 請求。但是,可能出現的常見問題是針對單一請求呼叫該函數兩次。如果您的程式依賴於遞增計數器或根據請求計數執行操作,這種行為可能會特別成問題。

讓我們深入研究所提供的程式碼片段所展示的問題。在 Web 瀏覽器中載入連接埠 8000 後,hello 函數將被呼叫兩次。當使用curl時,這種行為的令人困惑的本質變得很明顯,它只呼叫該函數一次。

在程式碼中設定日誌記錄機制後,您會發現瀏覽器也會要求/favicon.ico。該請求由瀏覽器發起,目的是在選項卡或網址列中顯示代表網站的小圖示或徽標。

問題的解決方案在於確認 favicon 的請求並進行適當處理。以下是滿足此需求的程式碼更新版本:

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 請求,從而導致每個網頁請求僅呼叫一次 hello 函數。

以上是為什麼每個瀏覽器請求都會觸發我的 Go HandleFunc 兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn