浏览器跨域请求被拦截需服务端配置CORS:Spring Boot可用@CrossOrigin注解(单接口)或CorsConfig全局配置(生产推荐),Express则通过cors中间件实现,注意allowCredentials与allowedOrigins不能同时为*。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

前端调用Spring Boot或Express后端接口时,浏览器报“Access to XMLHttpRequest at... blocked by CORS policy”,必须在服务端配置CORS响应头才能让请求通过。
Spring Boot中用@CrossOrigin注解快速启用跨域
适用于仅需开放个别接口、开发联调阶段快速验证的场景。直接在Controller类或方法上加注解,5秒生效。
在目标控制器类顶部添加 @CrossOrigin 注解:
@RestController<br>@RequestMapping("/api")<br><strong>@CrossOrigin</strong><br>public class ProductController { ... }
这会自动为该类下所有接口添加 Access-Control-Allow-Origin: * 等基础头。注意:若前端需携带 Cookie 或 Token,必须显式设置 @CrossOrigin(allowCredentials = "true"),且此时 origins 不能为 "*",否则浏览器拒绝请求。
如需更精细控制,可指定白名单域名:
@CrossOrigin(origins = "https://your-frontend.com", maxAge = 3600)
Spring Boot全局配置CORS(推荐生产使用)
避免在每个Controller重复加注解,统一管理所有接口的跨域策略,适合中大型项目。
第一步:新建配置类 CorsConfig.java,放在 config 包下;
第二步:让该类实现 WebMvcConfigurer 接口;
第三步:重写 addCorsMappings 方法,注册通配路径与跨域规则:
@Configuration<br>public class CorsConfig implements WebMvcConfigurer {<br> @Override<br> public void addCorsMappings(CorsRegistry registry) {<br> registry.addMapping("/**")<br> .allowedOrigins("http://localhost:3000", "https://prod.yourapp.com")<br> .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")<br> .allowedHeaders("*")<br> <strong>.allowCredentials(true)</strong>;<br> }<br>}
⚠️关键点:allowCredentials(true) 与 allowedOrigins("*") 互斥,必须指定具体域名列表,否则启动时报错且跨域失效。
Express中用cors中间件一键开启跨域
Express项目无需手动拼接响应头,引入官方维护的 cors 中间件即可完成全部配置。
执行命令安装依赖:npm install cors;
在入口文件(如 app.js 或 server.js)顶部导入并使用:
const cors = require('cors');<br>app.use(cors());
这行代码会让所有接口响应头包含 Access-Control-Allow-Origin: *,适用于本地开发。
若需限制来源并支持凭证,改用对象配置:
app.use(cors({<br> origin: ["http://localhost:3000", "https://your-fe.com"],<br> credentials: true<br}));
注意:Express中 credentials: true 同样要求 origin 必须是数组形式的具体地址,不可为字符串 "*"。
验证CORS是否生效的终端命令
不依赖浏览器,用 curl 直接检查响应头最可靠:
curl -I http://localhost:8080/api/products
观察返回中是否包含以下三行:
Access-Control-Allow-Origin: http://localhost:3000<br>Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS<br>Access-Control-Allow-Credentials: true
若缺失任意一项,说明配置未生效或被其他过滤器覆盖。此时需检查 Spring Boot 是否存在多个 CorsConfigurationSource Bean 冲突,或 Express 中 cors() 是否放在了路由定义之后。


















