예기치 않게 호출되는 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"에 대한 것임을 알 수 있습니다. 이를 방지하려면 다음 중 하나를 수행하세요.
HTTP 요청 흐름을 이해하고 특정 예외 사례를 고려하면 강력하고 안정적인 웹을 작성하는 데 도움이 됩니다. Go를 사용하는 서버.
위 내용은 Go HTTP 함수 핸들러가 두 번 호출되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!