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) }
观察:
如果当您在 Web 浏览器中访问端口 8000 时,您会注意到“hello”处理程序被调用了两次。这是因为浏览器还会请求“/favicon.ico”。如果您使用 cURL 访问相同的 URL,则处理程序仅被调用一次。
要了解并解决此问题,只需记录请求即可。您会看到第二个请求是针对“/favicon.ico”。为了避免这种情况,您可以:
了解 HTTP 请求流程并考虑特定的边缘情况将帮助您编写健壮且可靠的 Web使用 Go 的服务器。
以上是为什么我的 Go HTTP 函数处理程序被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!