>백엔드 개발 >Golang >Go HTTP 함수 핸들러가 두 번 호출되는 이유는 무엇입니까?

Go HTTP 함수 핸들러가 두 번 호출되는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 09:27:14507검색

Why is my Go HTTP function handler called twice?

예기치 않게 호출되는 HTTP 함수 핸들러

Go에서 HTTP 핸들러를 사용할 때는 요청이 처리되는 방식을 이해하는 것이 중요합니다. 일반적인 시나리오에서 브라우저는 루트 URL을 요청할 뿐만 아니라 시각적 목적으로 "/favicon.ico"라는 아이콘 파일도 요청합니다. 이 추가 요청으로 인해 핸들러 함수가 두 번 호출될 수 있습니다.

예:

각 페이지에서 카운터를 증가시키는 다음 코드를 고려해 보세요. 방문:

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

관찰:

웹 브라우저에서 포트 8000에 액세스하면 "hello" 핸들러가 두 번 호출되는 것을 볼 수 있습니다. 이는 브라우저가 "/favicon.ico"도 요청하기 때문입니다. cURL을 사용하여 동일한 URL에 액세스하는 경우 핸들러는 한 번만 호출됩니다.

이 문제를 이해하고 해결하려면 요청을 기록하면 됩니다. 두 번째 요청은 "/favicon.ico"에 대한 것임을 알 수 있습니다. 이를 방지하려면 다음 중 하나를 수행하세요.

  • "/favicon.ico"에 대한 핸들러를 생성하고 자리 표시자 아이콘이나 파비콘을 제공합니다.
  • "/를 무시하도록 HTTP 서버를 구성합니다. favicon.ico" 요청.

HTTP 요청 흐름을 이해하고 특정 예외 사례를 고려하면 강력하고 안정적인 웹을 작성하는 데 도움이 됩니다. Go를 사용하는 서버.

위 내용은 Go HTTP 함수 핸들러가 두 번 호출되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.