前后端跨域的解决办法

文章目录

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

👉 所有服务统一跨域


相关推荐
m0_敲代码的彭于晏1685 小时前
Vercel 前端部署与全栈开发实战指南
前端·状态模式
星恒随风19 小时前
Linux线程同步与互斥(二):从日志系统与线程池设计,到线程安全单例、可重入函数和死锁原理
linux·运维·状态模式
学Linux的语莫2 天前
python中类的常见写法
开发语言·python·状态模式
223糖2 天前
Tool Calling 是什么?用后端接口的思路讲清楚
状态模式
染指11103 天前
151.Agent-LangGraph-Send发送(Map-Reduce模式)
人工智能·python·langchain·状态模式·agents
鸽鸽程序猿5 天前
【项目】【在线判题系统】竞赛发布与撤销发布
状态模式
lemon_sjdk5 天前
从一段真实的 Electron IM 前端代码,看高级前端的工程化修养
前端·electron·状态模式·im
Nebula_g5 天前
云禾外卖补充—项目整体后端运行逻辑-对流程的更深层次理解
java·开发语言·网络·数据库·状态模式·javase
Wang's Blog5 天前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
Java后端的Ai之路5 天前
14、ReactJS - 路由(Router)
前端·react.js·状态模式