诡异的404之谜

2025-09-02阅读(842)评论(0)牵着狗狗看MM

苏州实时公交查询

9/4更新

今天,统一的问题又出现在了window电脑上,所以排除代码配置、网络、配置问题
最终定位到vite.config.ts中的代理上

rewrite: (path: string) => path.replace(/^\/api/, '/')

打印出来一看

 rewrite: (path: string) => {
      console.log(path, path.replace(/^\/api/, '/'))
      return path.replace(/^\/api/, '')
}

确实是会多出一个斜杠,多了个斜杠请求发送到后端服务器上,自然会找不到此方法

那为什么会有时在mac上是正常,Windows是404;或者有时在window正常,mac缺是404

1. 不同操作系统的差异

  • mac 可能用的 node 版本 / dev server 对 // 自动归一化成 /

  • windows 上的 node 版本没做归一化,直接发出 //

  • 反过来也可能出现,因为行为取决于 代理库的实现 + 目标服务的容忍度

2. 缓存 / 热更新影响

Vite 热更新时,有时候代理缓存了正确的 URL(单斜杠),有时候拼了双斜杠,所以会看到“时好时坏”。

 

———————-分割线———————

 

问题背景:环境一致的假象

作为一名开发者,我们都信奉一个真理:版本锁定的代码在任何环境下的表现都应该一致。然而,最近我遇到了一个令人困惑的问题——完全相同的Vite项目代码,在两台电脑上表现截然不同。

在一台Windows电脑上,前端应用完美运行,API请求正常响应。而在我的MacBook上,却持续收到404 Not Found错误,尽管代码、依赖版本甚至Vite配置都完全一致。

这看似简单的问题,却引发了一场长达数小时的深度排查之旅。

问题现象:相同的代码,不同的表现

在Mac上运行项目后,浏览器开发者工具显示API请求返回404:

Request URL: http://localhost:8080/api/xxx
Status Code: 404 Not Found
Remote Address: 127.0.0.1:8080

而奇怪的是,另一台电脑上同样的请求却能正常返回200。

深度排查过程

1:初步假设与验证

首先,我排除了最明显的可能性:

  • ✅ 代码确实完全一致(Git验证)

  • ✅ 网络连通性正常(ping测试)

  • ✅ 后端服务正常运行(另一台电脑可访问)

2:网络层排查

命令检查端口占用情况:确认没有端口没有被占用

3:Vite代理配置验证(这步可以跳过,因为是一套代码)

4:清除浏览器缓存,并开启浏览器network中的disable cache

经过上面4步还是不行,那么就只有一种问题了,依赖的缓存问题,因为,电脑默认是node14,这个项目用的是node22,依稀记得安装这个项目的依赖时,一开始是用默认的node14,装了一次,然后又切换到node22装了一次,装之前没有清空之前的node_modules目录,

所以尝试清空node_modules并重新安装依赖,问题解决!!!

原因分析

某些依赖包在不同平台上的安装版本或编译结果存在差异,导致Vite代理中间件行为不一致。

虽然package-lock.json锁定了版本号,但:

  1. 二进制依赖在不同平台需要重新编译

  2. 某些依赖可能存在平台特定的代码路径

  3. 安装过程中的缓存或部分更新可能导致不一致

赞(0)
转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » 诡异的404之谜
分享到: 更多 (0)