首页 > 后端开发 > Golang > 为什么我的 Go HTTP 函数处理程序被调用两次?

为什么我的 Go HTTP 函数处理程序被调用两次?

Patricia Arquette
发布: 2024-12-15 09:27:14
原创
507 人浏览过

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)
}
登录后复制

观察:

如果当您在 Web 浏览器中访问端口 8000 时,您会注意到“hello”处理程序被调用了两次。这是因为浏览器还会请求“/favicon.ico”。如果您使用 cURL 访问相同的 URL,则处理程序仅被调用一次。

要了解并解决此问题,只需记录请求即可。您会看到第二个请求是针对“/favicon.ico”。为了避免这种情况,您可以:

  • 专门为“/favicon.ico”创建一个处理程序并提供占位符图标或 favicon。
  • 配置您的 HTTP 服务器以忽略“/ favicon.ico”请求。

了解 HTTP 请求流程并考虑特定的边缘情况将帮助您编写健壮且可靠的 Web使用 Go 的服务器。

以上是为什么我的 Go HTTP 函数处理程序被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板