首页 > 后端开发 > Golang > 为什么在使用网络浏览器时我的 Go `HandleFunc` 被调用两次?

为什么在使用网络浏览器时我的 Go `HandleFunc` 被调用两次?

Mary-Kate Olsen
发布: 2024-12-15 08:21:18
原创
249 人浏览过

Why is my Go `HandleFunc` called twice when using a web browser?

HttpHandler 的意外双重调用:HandleFunc

简介

使用 http.ServeMux 时Go Web 服务器中的多路复用器,观察到注册的处理程序对于从 Web 浏览器发出的每个请求,函数 (HandleFunc) 都会被调用两次。此行为与预期功能相反。

问题

在使用可递增计数器的处理程序函数实现基本 Web 服务器时,可以观察到计数器会递增每个浏览器请求两次。然而,当使用curl时,处理程序只按预期被调用一次。

原因

记录请求后,很明显浏览器还发送了一个请求/favicon.ico。这是对通常显示在浏览器地址栏或选项卡中的小图标的请求。由于 ServeMux 多路复用器默认匹配所有 URL,因此它会为此附加请求调用已注册的处理程序,从而导致双重调用。

解决方案

防止处理程序为 favicon.ico 请求调用时,可以采用两种方法考虑:

  1. 添加特定的 favicon.ico 处理程序:

通过为 / 定义单独的处理程序favicon.ico,仅对常规页面调用 hello 处理程序

  1. 跳过默认模式的处理程序:

此方法检查 URL.Path请求并确保仅当路径恰好为 /.

时才调用 hello 处理程序

以上是为什么在使用网络浏览器时我的 Go `HandleFunc` 被调用两次?的详细内容。更多信息请关注PHP中文网其他相关文章!

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