Vite 开发服务器为何在 Firefox 下每十五秒提示连接断开

👁 64 次阅读

Vite 开发服务器为何在 Firefox 下每十五秒提示连接断开

来源:https://github.com/vitejs/vite/issues/23362

现象描述

issue #23362 报告的核心现象是:页面每 15 秒重新加载一次,且只在 Firefox(Windows)下出现,Chrome、Opera、Edge 均无此问题。复现对象是一个 Svelte 项目。 报告者给出的 Firefox 控制台日志如下:
[vite] server connection lost. Polling for restart...
[vite] connected from window
[vite] connected from window
[vite] new window visibility visible
[vite] ping successful
[vite] connecting...
[vite] connected.
关键观察点在于:连接丢失期间 Vite 侧没有任何日志输出。报告者还提到,粘贴 Vite 初始化日志失败,报错为 Field can not be longer than 65536 characters,因此完整的启动日志未能附上。 复现仓库为 https://github.com/uh-zuh/vitejs_vite_bug_connection_lost_firefox,步骤是克隆仓库、执行 run-dev.sh / run-dev.cmd、用桌面版 Windows Firefox 访问 http://localhost:5173/、等待 15 秒后观察页面重载。报告者环境为 Debian GNU/Linux 13(trixie)容器,Node 26.7.0,npm 11.19.0。

背景原因

该 issue 当前状态为 open,标签为 pending triage,尚无维护者确认的框架层修复。讨论的方向逐步从”是否是 Vite 的 bug”收敛到 Firefox 的网络栈行为。 维护者 bluwy 在讨论早期询问了 Firefox 版本,报告者回复为 154.0.1(64 位),是当时的最新版本。bluwy 随后表示在自己(仅 macOS 可测)环境下工作正常,并倾向于认为这是 Firefox 的 bug 而非 Vite 需要修复的问题。 贡献者 TETvega 进行了多环境复现尝试,测试环境包括:Ubuntu 24.04 / Firefox 155.0.1、Windows 11 / Firefox 155.0.1、Windows 11 / Firefox 154.0.1,以及使用报告者提供的 Docker 复现方式在 Windows 11 / Firefox 154.0.1 下测试。所有情况下 HMR 连接保持稳定,页面在 15 秒后没有重载。 讨论的转折点出现在报告者补充了按 URL 区分的测试结果: 报告者同时说明,自己只有 Windows 10,在 Firefox 155.0.1 隐私模式(无扩展)下问题仍然复现。 TETvega 随后找到一份类似的 Firefox 报告:https://bugzilla.mozilla.org/show_bug.cgi?id=2054312。在该案例中,Firefox 使用 127.0.0.1(IPv4),而 Edge 与 curl 通过 ::1(IPv6)连接;Mozilla 判定服务在不同接口上行为不同后关闭了该报告。这与本 issue 的观察高度一致:Firefox + 127.0.0.1 会重载,Firefox + [::1] 稳定。 TETvega 提出这可能是 Firefox 的 Happy Eyeballs 实现与 IPv4/IPv6 地址选择之间的交互问题,尤其是围绕 localhost 的解析。建议的验证方式是在 Firefox 的 about:config 中设置 network.dns.preferIPv6 = true,然后再次尝试 http://localhost:5173/。 bluwy 在后续评论中关联了另一个 issue:https://github.com/vitejs/vite/issues/22215,作为可能相关的问题。

排查或量化方法

据 issue 讨论,有效的定位手段是把”URL 形式”作为变量做对照测试,而不是先怀疑 Vite 配置或框架。报告者和 TETvega 使用的对照维度包括:
  • 按主机名形式切换:localhost、127.0.0.1、[::1],以及局域网地址。
  • 在 WSL 环境下切换 server.host 取值:true 与 '0.0.0.0'、'::'。
  • 在 Firefox 中切换 about:config 的 network.dns.preferIPv6:true 与 false。
  • 使用隐私模式排除扩展干扰:报告者在 Firefox 155.0.1 隐私模式下仍可复现。
报告者在 WSL 下使用 server.host: true 的实测结果: 使用 server.host: '0.0.0.0' 的实测结果: 在 Docker + server.host: true + network.dns.preferIPv6: true 条件下的实测结果: 值得注意的是,评论中同时出现”完全不可用”与”稳定”两类结果,且随 server.host 与 URL 形式的组合而变化,说明不同网络栈组合下的表现并不一致,讨论中并未给出一致性结论。

完整解决方案(当前处理路径与局限)

该 issue 仍为 open,官方尚未合入方案,因此本节仅归纳 issue 讨论中已经出现过的动作与建议。 据 issue 讨论,可以尝试的路径包括: 1. 在 Firefox 的 about:config 中将 network.dns.preferIPv6 设置为 true,然后访问 http://localhost:5173/。 2. 直接改用 http://[::1]:5173/ 访问开发服务器。 3. 调整 Vite 的 server.host 取值(讨论中出现过 true、'0.0.0.0'、'::'),并配合不同 URL 形式逐一验证。 4. 使用隐私模式排查浏览器扩展影响——但报告者在 Firefox 155.0.1 隐私模式下仍可复现。 上述路径的局限在于:
  • 报告者在 Docker + server.host: '::' + network.dns.preferIPv6: true 组合下,http://127.0.0.1:5173/ 仍然重载。
  • 同一配置在不同 URL 形式上表现不一致,未形成单一可靠方案。
  • 维护者尚未给出框架层修复,pending triage 标签表明该条目仍待分诊。

参数或对比表格

URL 形式Firefox 表现(报告者原始环境)备注
http://localhost:5173/重载默认访问方式
http://127.0.0.1:5173/重载IPv4 回环
http://[::1]:5173/不重载IPv6 回环
测试环境结果报告人
Ubuntu 24.04 / Firefox 155.0.1连接稳定,15 秒无重载TETvega
Windows 11 / Firefox 155.0.1连接稳定,15 秒无重载TETvega
Windows 11 / Firefox 154.0.1连接稳定,15 秒无重载TETvega
Windows 11 / Firefox 154.0.1 + Docker 复现连接稳定,15 秒无重载TETvega
Windows 10 / Firefox 155.0.1 隐私模式仍可复现uh-zuh
network.dns.preferIPv6server.hostURL表现
truetruehttp://localhost:5173/稳定,HMR 工作
truetruehttp://[::1]:5173/稳定,HMR 工作
truetruehttp://127.0.0.1:5173/重载,HMR 工作
true'::'http://127.0.0.1:5173/重载

常见错误排查

  • 把问题归因于框架(如 Svelte)而非连接层:报告者复现仓库是 Svelte 项目,但日志显示的是 [vite] server connection lost,讨论未指向框架层。
  • 忽略浏览器扩展的影响:TETvega 建议检查扩展,但报告者在隐私模式下仍复现,说明扩展不是唯一因素。
  • 只用 localhost 测试:讨论表明 localhost、127.0.0.1、[::1] 三者表现可能完全不同,只测一种会漏判。
  • 认为 Vite 日志缺失等同于服务器无响应:报告明确指出连接丢失期间没有任何 Vite 日志,客户端轮询是否实际到达服务端在讨论中并没有结论。
  • 把单一用户的”稳定”结论当作定论:TETvega 在多环境未复现,但报告者在 Windows 10 隐私模式下仍复现,两边结论不一致,讨论中未调和。

实践建议

  • 遇到同类问题时,先固定”URL 形式”这个变量做 A/B 对照,再动 Vite 配置。
  • 在 about:config 中调整 network.dns.preferIPv6 属于浏览器侧动作,成本低,可作为第一道验证。
  • 记录测试时的完整版本三元组(Firefox 版本、Node 版本、复现方式是否为 Docker),本 issue 中各方结论差异与版本/平台组合强相关。
  • 若需要在 issue 中补充信息,附上 URL 形式、server.host 取值、network.dns.preferIPv6 取值三项,能显著提高定位效率。
  • 关注 https://bugzilla.mozilla.org/show_bug.cgi?id=2054312 与 https://github.com/vitejs/vite/issues/22215 的后续进展,它们是本 issue 讨论中被明确关联的外部线索。

FAQ

Q:这个 issue 已经修复了吗? A:没有。当前状态为 open,标签为 pending triage,官方未合入方案。讨论中的结论倾向于 Firefox 侧的网络栈行为,但未被确认。 Q:为什么只有 Firefox 出现,Chrome、Opera、Edge 正常? A:据 issue 讨论,Chrome、Opera、Edge 未复现。TETvega 引用的 Firefox bugzilla 案例显示 Firefox 走 127.0.0.1(IPv4)而 Edge 与 curl 走 ::1(IPv6),推测与 Firefox 的 Happy Eyeballs 实现及 IPv4/IPv6 地址选择有关。该推测在 issue 中未被最终确认。 Q:http://[::1]:5173/ 一定稳定吗? A:不一定。报告者在原始环境下 [::1] 不重载,但在 WSL + server.host: '0.0.0.0' 下 [::1] 完全不可用,在 Docker + server.host: '::' + network.dns.preferIPv6: true 下 [::1] 稳定。表现随网络栈组合变化。 Q:设置 network.dns.preferIPv6 = true 能彻底解决吗? A:不能保证。该配置由 TETvega 提出作为验证手段,报告者实测后 http://127.0.0.1:5173/ 仍然重载,只是 HMR 保持工作。它改变了部分 URL 的表现,但没有消除全部重载。 Q:维护者的态度是什么? A:维护者 bluwy 表示自己(仅 macOS)测试正常,倾向于认为是 Firefox 的 bug 而不是 Vite 需要修复的问题,并关联了 https://github.com/vitejs/vite/issues/22215 作为可能相关条目。issue 目前仍处于待分诊状态。

订阅 AI 百事知

每周精选 AI 工具评测、行业资讯与使用教程,第一时间送达。

🔗 相关阅读(你可能还想看)

📄 Outlook 节点创建草稿添加附件为何报 UnableToDeserializePostBody?
📄 Flowise 点击市场或聊天页为何整页白屏?
📄 如何解决 Azure AI Search 向量存储的 $filter 递归深度超限错误?
📄 如何解决 shadcn/ui Sidebar 与 Header 重叠的问题?
📄 Next.js 开发服务器为何会 JavaScript heap out of memory?
📄 Nuxt 偶发 Cannot read properties of undefined 报错是怎么回事
📄 如何解决「Visual Studio Code for ipad」相关的问题?
📄 如何在AutoGen中实现企业级代理治理的加密行动收据(AAR)?
📄 记忆内容未清洗直接注入系统提示词,如何防范间接提示注入?
crewAI LiteAgent 将记忆内容直接拼接到系统提示词,存在间接提示注入风险。社区提出分层防御方案,但 iss
🤖 想直接和 AI 对话?
免费体验 DeepSeek V4 等顶级模型,无需注册,随问随答
🎯 立即体验 AI 工具

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

🤖 嘟嘟客服
滚动至顶部
🤖 嘟嘟客服
🤖 嘟嘟客服
';i.value='';m.innerHTML+='
...
';fetch('/dify-chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({query:q,user:'w'+Date.now()})}).then(function(r){return r.json()}).then(function(d){var a=d.answer||'暂时无法回复';m.removeChild(m.lastChild);m.innerHTML+='
'+a+'
'}).catch(function(){m.removeChild(m.lastChild);m.innerHTML+='
网络异常
'})">发送