uniapp 跨域问题如何解决

在uniapp开发中遇到跨域请求问题,使用uni.request访问第三方接口时浏览器报错,提示跨域请求被阻止。请问在H5端和APP端分别该如何正确配置解决跨域问题?是否需要在manifest.json中设置代理,或通过后端配合解决?求具体实现方案。

2 回复

在manifest.json中配置代理,或在H5平台设置跨域头。后端允许跨域或使用云函数中转也可解决。


在 UniApp 中,跨域问题主要出现在开发阶段的 H5 平台,因为浏览器会强制执行同源策略。以下是解决方案:

1. 配置 manifest.json 文件(开发阶段 H5)

manifest.jsonh5 配置项中添加 devServer 字段,通过代理解决跨域:

{
  "h5": {
    "devServer": {
      "proxy": {
        "/api": {
          "target": "https://your-api-domain.com",
          "changeOrigin": true,
          "secure": false,
          "pathRewrite": {
            "^/api": ""
          }
        }
      }
    }
  }
}
  • 说明
    将请求到 /api 的路径代理到目标服务器(例如 https://your-api-domain.com),pathRewrite 可重写路径(如去掉 /api 前缀)。

2. 生产环境解决方案

  • 后端配置 CORS
    让后端在响应头中添加 Access-Control-Allow-Origin 等字段,允许你的域名访问。
  • 使用 Nginx 反向代理
    部署时通过 Nginx 配置代理,将前端请求转发到后端接口。

3. 注意事项

  • 跨域问题仅影响浏览器环境(如 H5),小程序和 App 平台不受同源策略限制,无需额外配置。
  • 确保生产环境接口地址支持 HTTPS(H5 要求)。

总结

开发阶段用 devServer 代理,生产环境通过后端或 Nginx 解决。其他平台(如小程序)无需处理跨域。

回到顶部