uniapp h5跨域应配manifest.json的h5.devserver.proxy节点,非network.proxy;需切换源码视图编辑,重启服务生效,changeorigin:true、secure:false为开发常用配置,pathrewrite{"^/api":""}可去除前缀避免404。

UniApp H5 开发中遇到跨域,**直接配 manifest.json 里的 proxy 就行,不用动后端、不用装插件、不用改构建工具**。这是开发阶段最轻量、最稳定、HBuilderX 原生支持的方案。
manifest.json 中 proxy 配置写在哪?
必须写在 h5.devServer.proxy 节点下,不是 network.proxy(旧版文档有误导,2026 年起已统一为 h5.devServer)。路径错误会导致代理完全不生效。
-
manifest.json必须切换到「源码视图」编辑,可视化界面会清空自定义配置 - 确保
"h5"是顶层字段,和"name"、"appid"同级 - 如果项目用了自定义
vite.config.ts或vue.config.js,h5.devServer仍优先生效,但二者冲突时以 manifest 为准
proxy 配置里 changeOrigin 和 secure 怎么设?
changeOrigin: true 几乎必开,否则某些后端(如 Express、Nginx)会因 Host 头不匹配直接 404;secure: false 是本地开发的默认安全选择,避免 HTTPS 证书校验失败。
-
changeOrigin: true会让代理把请求头中的Host改成target地址的域名,绕过服务端的域名白名单校验 -
secure: false仅影响代理是否校验目标服务器的 SSL 证书——本地http://localhost:3000或内网地址根本不用 HTTPS,设为true反而报错Error: self signed certificate - 若目标是正式 HTTPS 接口(如
https://api.example.com),且你确认证书有效,可保留secure: true,但开发阶段极少需要
pathRewrite 不写会怎样?怎么写才不踩坑?
不写 pathRewrite,前端请求的路径会原样拼到 target 后面。比如请求 /api/user,代理会发往 http://localhost:3000/api/user——**后端没这个 /api 前缀就 404**。
- 最常用写法:
"^/api": "",把请求路径开头的/api去掉,/api/user→http://localhost:3000/user - 正则必须用字符串形式,
^/api不能写成/^\/api/或省略^,否则重写失效 - 多个规则按顺序匹配,建议只配一个主前缀(如
/api),避免规则冲突导致路径错乱
为什么改了 manifest.json 还是跨域?常见失效原因
代理配置生效的前提是:HBuilderX 真的读到了新配置,并且你访问的是开发服务器地址(http://localhost:8080),不是直接双击 HTML 文件或用其他浏览器打开 dist 目录。
- 改完
manifest.json必须 **重启 HBuilderX 的运行服务**(点「停止运行」再「运行到浏览器」),热更新不触发 proxy 重载 - 检查浏览器地址栏是不是
http://localhost:8080—— 如果是file://协议或 IP 地址(如http://192.168.1.100:8080),代理不工作 - 打开浏览器 DevTools → Network,看请求的
Preview/Response标签页:如果是浏览器拦截报错(如No 'Access-Control-Allow-Origin'),说明代理根本没转发;如果看到后端返回内容但状态码是 404/500,说明代理转发了但路径或 target 错了
真正容易被忽略的是:代理只在 h5 平台开发时起作用,打包后的 H5 上线部署时,得靠 Nginx 或后端配 CORS,manifest.json 里的 proxy 完全不参与生产环境逻辑。











