HttpHandler 的意外双重调用:HandleFunc
简介
使用 http.ServeMux 时Go Web 服务器中的多路复用器,观察到注册的处理程序对于从 Web 浏览器发出的每个请求,函数 (HandleFunc) 都会被调用两次。此行为与预期功能相反。
问题
在使用可递增计数器的处理程序函数实现基本 Web 服务器时,可以观察到计数器会递增每个浏览器请求两次。然而,当使用curl时,处理程序只按预期被调用一次。
原因
记录请求后,很明显浏览器还发送了一个请求/favicon.ico。这是对通常显示在浏览器地址栏或选项卡中的小图标的请求。由于 ServeMux 多路复用器默认匹配所有 URL,因此它会为此附加请求调用已注册的处理程序,从而导致双重调用。
解决方案
防止处理程序为 favicon.ico 请求调用时,可以采用两种方法考虑:
添加特定的 favicon.ico 处理程序:
通过为 / 定义单独的处理程序favicon.ico,仅对常规页面调用 hello 处理程序
跳过默认模式的处理程序:
此方法检查 URL.Path请求并确保仅当路径恰好为 /.
时才调用 hello 处理程序以上是为什么在使用网络浏览器时我的 Go `HandleFunc` 被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!