前后端跨域的解决办法

文章目录

    • [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

👉 所有服务统一跨域


相关推荐
星恒随风3 天前
C++ string 类详解:常用接口、OJ 场景与模拟实现中的深浅拷贝
开发语言·c++·笔记·学习·状态模式
colofullove5 天前
实时游玩页与 WebSocket 状态管理实现
websocket·网络协议·状态模式
夏天测5 天前
业务逻辑漏洞实战:篡改响应包绕过登录,直入后台管理系统
渗透测试·状态模式·业务逻辑漏洞·web 安全·响应包篡改
可乐ea6 天前
【Spring Boot + MyBatis|第7篇】JWT 登录认证与拦截器实现
java·spring boot·后端·mybatis·状态模式
前端不太难6 天前
GPU 集群调度架构解析
架构·状态模式
ShiJiuD6668889996 天前
外卖项目笔记总结上 (后端板块)
状态模式
前端不太难6 天前
当 AI 接管 Workspace:鸿蒙 PC Agent 架构设计实践
人工智能·状态模式·harmonyos
Maimai108087 天前
Web3 前端实时通信如何落地:从 SSE 订阅到行情、订单与账户状态更新
前端·javascript·react.js·前端框架·web3·状态模式
不吃青椒!8 天前
LangGraph 流式事件处理:从实战到体系
ai·langchain·状态模式
前端不太难8 天前
鸿蒙游戏世界模型:实现原理 + Demo实现
游戏·状态模式·harmonyos