2659cd5a8c
背景:配好了花生壳穿透 http://394nb68658le.vicp.fun → 本机 8080。 但 H5 原来跑在 127.0.0.1:5174,手机访问不到 —— 所以把 H5 静态文件 交给后端一起服务(同一个域名)。这样顺带也不再需要 CORS, 而且正是正式部署的形态。 改动: · application-dev.yml 加 spring.web.resources.static-locations, 默认指向 frontend-mp/dist/build/h5/,可用 H5_STATIC_DIR 覆盖。 ⚠️ 前缀必须是 spring.(我一开始写成了 fill.,表现是"页面 404 而应用 照常启动、没有任何报错")。 · fill.mp-h5.callback-url / h5-base-url 改成穿透域名。 · config/index.ts:API 地址按端区分(api 地址两端策略不同,写死一个值 一定会在某一边出错): H5 → location.origin(绝对同源) 小程序 → http://localhost:8080(没有"同域"概念,必须绝对地址) 用 uni-app 条件编译区分,而不是运行期判断(后者会把两套地址都打进包里)。 ⚠️ 修掉一个只在真实穿透下才会暴露的 bug: · 原来 H5 硬编码 http://localhost:8080。从公网域名打开时变成跨域请求 → 被 CORS 拦 → 页面显示"网络请求失败",而**从本机打开却是好的**。这个 bug 只有走真实 穿透/真机才会暴露 —— 这正是"要在真环境验证"的价值。 · 改成相对路径后**仍然失败**(request:fail),但同样地址用原生 XHR / fetch 都是 200。也就是说这是 uni.request 自身对相对路径的处理差异,不是服务端 或跨域问题 —— 而它长得像"网络不通",很容易往 CORS / 域名 / 后端去查,白绕一大圈。 最终用 location.origin(绝对同源)绕开。 验证:经公网 http://394nb68658le.vicp.fun/?scene=t1-k17 → 显示「示范职业学校 / 2026年9月机电专业认定材料收集 / 尚未发布」, 无头浏览器截图确认(不依赖人工)。 ※ 首次加载约 27 秒 —— 穿透的带宽限制(花生壳免费档),不是代码问题。