You need to enable JavaScript to run this app. .NET Core 3.1环境下C# HttpListener单次访问触发两次循环的问题
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1环境下C# HttpListener单次访问触发两次循环的问题

现象的根本原因

这不是HttpListener的功能异常,是Chromium内核浏览器(Edge、Chrome)的默认访问逻辑导致的:

  • 第一次while循环执行,对应你手动访问localhost、刷新页面时,浏览器获取页面HTML发起的根路径(/)GET请求。
  • 第二次while循环执行,对应浏览器加载完HTML后,自动发起的/favicon.ico图标请求——浏览器需要获取站点图标展示在标签页上,由于你没有在响应里声明自定义图标路径,就会默认向根路径拉取favicon资源。你的程序没有对这个请求做特殊过滤,会将其作为普通页面请求处理,输出完整HTML内容,因此多打印一次Response done日志。

验证方法

在获取请求上下文后,新增一行日志打印请求路径:

Console.WriteLine($"当前请求路径:{context.Request.Url.AbsolutePath}");

再次用浏览器访问时,日志会清晰展示两次请求的路径分别是/和/favicon.ico,和上述逻辑完全匹配。

优化处理方式

  • 收到请求后先判断路径,如果是/favicon.ico请求,直接给响应设置404状态码,不必返回完整HTML。
  • 在返回的HTML内容中添加<link rel="icon" href="data:,">,显式告知浏览器无需请求站点图标,即可避免第二次自动请求。
  • 扩展服务功能时,不要对所有路径的请求统一返回首页内容,需要基于请求路径做路由分发,匹配对应的处理逻辑。

内容的提问来源于stack exchange,提问作者Troskyvs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 14:06:03