前后端跨域的解决办法

文章目录

    • [1️⃣ CORS(最主流 ✅ 推荐)](#1️⃣ CORS(最主流 ✅ 推荐))
      • [✔ Spring Boot 实现方式一(推荐)](#✔ Spring Boot 实现方式一(推荐))
      • [✔ 方式二:@CrossOrigin(简单但不优雅)](#✔ 方式二:@CrossOrigin(简单但不优雅))
      • [✔ 方式三:Filter(企业常用🔥)](#✔ 方式三:Filter(企业常用🔥))
    • [2️⃣ Nginx 反向代理(生产环境王者 👑)](#2️⃣ Nginx 反向代理(生产环境王者 👑))
    • [3️⃣ 网关解决(微服务架构)](#3️⃣ 网关解决(微服务架构))

1️⃣ CORS(最主流 ✅ 推荐)

核心思路:

👉 后端加响应头,允许跨域

✔ Spring Boot 实现方式一(推荐)

全局配置:

java 复制代码
@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 所有接口
                .allowedOrigins("http://localhost:8080") // 前端地址
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true) // 允许cookie
                .maxAge(3600);
    }
}

✔ 方式二:@CrossOrigin(简单但不优雅)

java 复制代码
@RestController
@CrossOrigin(origins = "http://localhost:8080")
public class UserController {
}

👉 适合小项目 / 测试

👉 不适合生产(太分散)


✔ 方式三:Filter(企业常用🔥)

java 复制代码
@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {

        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");
        response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
        response.setHeader("Access-Control-Allow-Headers", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        chain.doFilter(req, res);
    }
}

👉 优点:统一控制,权限清晰

👉 企业最常见写法


2️⃣ Nginx 反向代理(生产环境王者 👑)

核心思路:

👉 让前端和后端"看起来同源"

复制代码
server {
    listen 80;
    server_name yourdomain.com;

    location /api/ {
        proxy_pass http://localhost:8081/;
    }
}

前端调用:

复制代码
/api/user

👉 浏览器认为:

复制代码
同一个域名 ✔

👉 实际:

复制代码
Nginx帮你转发到后端

🔥 优点:

  • 不用改代码
  • 安全性高
  • 企业必备

3️⃣ 网关解决(微服务架构)

如果你用的是:

👉 Spring Cloud Gateway

配置:

复制代码
spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "http://localhost:8080"
            allowedMethods:
              - GET
              - POST

👉 所有服务统一跨域


相关推荐
火云代理10 小时前
同一个网站,有的网络能打开、有的打不开?认识 IPv4 与 IPv6 的访问差异
服务器·网络·网络协议·tcp/ip·测试工具·php·状态模式
FungLeo3 天前
成为全栈·Vue 管理后台篇·分页只显示第一页:从接口total 定位到前端修复
前端·vue.js·状态模式·分页·naive ui·服务端分页·前端问题排查
严肃小白兔5 天前
TanStack Router 更新构建工具链:Node.js 兼容性、路由分割与前端工程实践
前端·node.js·状态模式
大江东去浪淘尽千古风流人物13 天前
【HexVIO】DSP卸载双目惯性VIO:Hexagon向量化前端与单帧融合调度深度解析
前端·状态模式·slam·dsp·vio·hexagon·移动端加速
吃一碗粉只付一碗钱14 天前
12-给SPA友好的401和403响应
c#·状态模式
sunlifenger15 天前
嵌入式部署,解锁张家港智慧灯杆的“极简组网”密码
科技·状态模式
上火的金鱼妹16 天前
关于多进程sse连接通知的实战
javascript·状态模式·sse
阿俊-全栈开发16 天前
LikeShop 小程序商城首页可配置弹窗的设计与实现(Java + uni-app)
小程序·状态模式·likeshop·likeshop开源商城
lingyubb16 天前
配音工具怎么选?从 TTS 合成链路看 6 个可量化参数
状态模式