> 백엔드 개발 > Golang > Go HandleFunc가 브라우저 요청당 두 번 트리거되는 이유는 무엇입니까?

Go HandleFunc가 브라우저 요청당 두 번 트리거되는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-26 02:20:09
원래의
696명이 탐색했습니다.

Why is my Go HandleFunc Triggered Twice per Browser Request?

HandleFunc가 여러 번 트리거됨: 조사 및 해결

웹 서버의 맥락에서 HandleFunc 함수는 수신 처리에 중요한 역할을 합니다. HTTP 요청. 그러나 발생할 수 있는 일반적인 문제는 단일 요청에 대해 함수가 두 번 호출되는 것입니다. 이 동작은 프로그램이 카운터 증가에 의존하거나 요청 수에 따라 작업을 수행하는 경우 특히 문제가 될 수 있습니다.

제공된 코드 조각에서 보여주는 문제를 자세히 살펴보겠습니다. 웹 브라우저에 포트 8000을 로드하면 hello 함수가 두 번 호출됩니다. 이 동작의 당혹스러운 특성은 함수를 한 번만 호출하는 컬을 사용할 때 분명해집니다.

코드 내에서 로깅 메커니즘을 설정하면 브라우저가 /favicon.ico도 요청한다는 것을 알게 됩니다. 이 요청은 탭이나 주소 표시줄에 웹사이트를 나타내는 작은 아이콘이나 로고를 표시하기 위해 브라우저에 의해 시작됩니다.

문제에 대한 해결책은 파비콘에 대한 요청을 승인하고 적절하게 처리하는 데 있습니다. 다음은 이러한 요구 사항을 해결하는 업데이트된 코드 버전입니다.

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)
}
로그인 후 복사

이 수정을 통해 파비콘 요청이 정상적으로 처리되어 각 웹페이지 요청에 대해 hello 함수가 한 번만 호출됩니다.

위 내용은 Go HandleFunc가 브라우저 요청당 두 번 트리거되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿