👁 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 区分的测试结果:
http://localhost:5173/— 重载http://127.0.0.1:5173/— 重载http://[::1]:5173/— 不重载
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 隐私模式下仍可复现。
server.host: true 的实测结果:
http://localhost:5173/— 稳定http://[::1]:5173/— 稳定http://127.0.0.1:5173/— 完全不可用http://172.29.170.88:5173/— 稳定http://192.168.2.57:5173/— 完全不可用
server.host: '0.0.0.0' 的实测结果:
http://localhost:5173/— 稳定http://[::1]:5173/— 完全不可用http://127.0.0.1:5173/— 稳定http://172.29.170.88:5173/— 稳定
server.host: true + network.dns.preferIPv6: true 条件下的实测结果:
http://localhost:5173/— 稳定,HMR 工作http://[::1]:5173/— 稳定,HMR 工作http://127.0.0.1:5173/— 重载,HMR 工作http://172.29.170.88:5173/— 稳定,HMR 工作http://192.168.2.57:5173/— 重载,HMR 工作
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.preferIPv6 | server.host | URL | 表现 |
true | true | http://localhost:5173/ | 稳定,HMR 工作 |
true | true | http://[::1]:5173/ | 稳定,HMR 工作 |
true | true | http://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 目前仍处于待分诊状态。
🔗 相关阅读(你可能还想看)
📄 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