【Go】net/http 패키지로 handler가 2회 실행된다

5060 단어 5HTTP

문제



Go의 net/http 패키지를 사용하여 http 서버를 세우면 요청을 처리하는 함수가 두 번 실행된다. (한 번에 좋지만)

구체적으로는 다음과 같은 코드를 실행하여

main.go

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("handle")
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe("127.0.0.1:8080", nil)
}


htp://127.0.0.1:8080에 방문한 후 페이지를 업데이트하면,


handler 함수가 두 번 실행되었습니다. 어째서 야넨.

원인



아무래도 크롬
  • htp://127.0.0.1:8080
  • h tp://127.0.0.1:8080/후아 흠. 이코

  • 둘 다 요청을 보내고 있기 때문입니다. ( htps : // 기주 b. 코 m / go g / go / 이스 s / 1298 )

    favicon.ico는 무엇입니까?



    홈페이지의 기호 아이콘으로 사용되는 이미지 파일 같다. ( htps // 3. 네-3-있어. 린후 / rd14168. HTML )

    해결책



    favicon.ico에 요청할 때 아무 작업도 수행하지 않는 핸들러를 등록합니다.

    main.go
    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    // 本命のハンドラ
    func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Println("handle")
    }
    
    // 何もしないハンドラ
    func handlerICon(w http.ResponseWriter, r *http.Request) {}
    
    func main() {
        // 本命のハンドラを登録
        http.HandleFunc("/", handler)
    
        // 何もしないハンドラを登録
        http.HandleFunc("/favicon.ico", handlerICon)
    
        http.ListenAndServe("127.0.0.1:8080", nil)
    }
    
    

    후기



    가볍게 빠졌지만 영어로 구그하자마자 해결했다. 영어로 조사하는 대지.

    좋은 웹페이지 즐겨찾기