前端访问后台接口存在跨域问题,如何处理解决

前端跨域问题 最实用、最常用解决方案

现在遇到的前端访问后台接口跨域 ,是开发中最常见 的问题,我给你用最简单、最落地的方式讲清楚,直接照着做就能解决。


一、什么是跨域?

只要 协议、域名、端口 任意一个不一样,浏览器就会阻止前端请求后台,报:

plaintext

复制代码
No 'Access-Control-Allow-Origin' header is present

这就是跨域(CORS)。


二、最推荐、最通用、生产环境也用的方案

✅ 方案 1:用 Nginx 反向代理解决(强烈推荐)

你刚才正在学 Nginx,正好用它解决跨域最完美!

原理:

  • 前端 → Nginx(同域)
  • Nginx → 后台(服务器之间无跨域)
直接给你可复制的 Nginx 配置

nginx

复制代码
server {
    listen 80;
    server_name localhost;

    # 前端页面(本地文件或前端服务)
    location / {
        root   D:/project/frontend;  # 你的前端本地路径
        index  index.html;
    }

    # 接口代理 /api/ 开头的请求全部转发给后台
    location /api/ {
        # 转发到你的真实后台地址
        proxy_pass http://127.0.0.1:8080/api/;

        # 解决跨域的请求头
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

前端请求方式

js

复制代码
// 原来跨域写法
// axios.get("http://localhost:8080/api/user")

// 现在不跨域
axios.get("/api/user")

✅ 优点:

  • 前端不用改代码
  • 后台不用改代码
  • 生产环境也能用
  • 你现在学 Nginx,这个最适合你

三、其他常用方案(你也可以了解)

✅ 方案 2:后台服务直接开启 CORS(最简单)

让后台在响应头加跨域允许,浏览器就不拦截了。

Java SpringBoot 示例

java

运行

复制代码
@Configuration
public class CorsConfig {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE")
                        .allowCredentials(true);
            }
        };
    }
}
Node.js/Koa 示例

js

复制代码
app.use(async (ctx, next) => {
  ctx.set("Access-Control-Allow-Origin", "*");
  await next();
});

✅ 方案 3:前端开发环境代理(vue /react/vite)

只用于本地开发,上线不能用。

Vue2 / Vue3 / Webpack

vue.config.js

js

复制代码
module.exports = {
  devServer: {
    proxy: {
      "/api": {
        target: "http://localhost:8080",
        changeOrigin: true
      }
    }
  }
};
Vite

vite.config.js

js

复制代码
export default {
  server: {
    proxy: {
      "/api": "http://localhost:8080"
    }
  }
};
相关推荐
不磕了还不行5 分钟前
用 Vue + Element UI 把元宝搜索的返回值做成“能点开检查的证据卡片”
前端·vue.js·ui
Csvn9 小时前
WASM
前端
修己xj10 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing0311 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿11 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
moshuying13 小时前
网购能买Token了!
前端
h_654321013 小时前
echarts实现柱状图加一条横线
前端·echarts
风骏时光牛马13 小时前
生成一个后端标题,只需要一个标题,不需要其他的任何文本。
前端
子非鱼@Itfuture13 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端
郭小李13 小时前
openFeign入门
java·开发语言·前端