cors本质是后端通过响应头明确授权跨域访问,核心是设置access-control-allow-origin等头部:生产环境禁用通配符*,必须指定具体域名;需配合allow-methods、allow-headers、allow-credentials及max-age等头协同配置,并确保预检请求(options)正确响应。

服务器跨域访问控制(CORS)本质是让后端明确告诉浏览器:“哪些网站可以来调我的接口”。配置核心不是加功能,而是设规则——用响应头说话。生产环境切忌直接开 *,否则等于把门敞开。
明确允许的来源(origin)
这是最基础也最关键的配置项。浏览器只认你写的域名,不认猜测或通配符(除非特殊场景)。
- 开发阶段可临时用
AllowAnyOrigin()或Access-Control-Allow-Origin: *快速验证,但上线前必须改掉 - 生产环境必须写具体域名,比如
https://app.example.com;多个前端站点就列数组:['https://site-a.com', 'https://site-b.net']
- 如果前端用了不同协议或子域名(如
http://localhost:3000 调 <code>https://api.example.com),每个都要显式列出 - Nginx/Apache 等反向代理中,用
map或RewriteCond动态匹配$http_origin,避免硬编码
声明允许的方法和请求头
光放行域名不够,还要说清“能怎么调”——哪些 HTTP 方法、带什么请求头才被接受。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
-
Access-Control-Allow-Methods至少包含实际用到的方法,常见组合是GET, POST, PUT, DELETE, OPTIONS -
Access-Control-Allow-Headers列出前端真正发送的自定义头,比如Authorization、X-Request-ID;若用Content-Type: application/json,必须包含Content-Type - 不要盲目写
*,尤其在需要凭据时——Access-Control-Allow-Headers: *在多数服务端实现里不被支持
处理凭据与预检缓存
一旦前端带 Cookie 或 Authorization,规则立刻变严格;而频繁的 OPTIONS 请求会影响性能,得靠缓存优化。
- 要传 Cookie 或 token,必须同时设置
Access-Control-Allow-Credentials: true且Access-Control-Allow-Origin不能为*,必须是具体域名 - 启用
Access-Control-Max-Age(如86400),让浏览器缓存预检结果一天,减少重复 OPTIONS 请求 - 确保服务器对
OPTIONS路径有响应(Express 自动处理;Nginx 需显式location = / { return 204; }或透传) - 多源场景下开启
Vary: Origin响应头,防止 CDN 缓存污染
按部署环境选配置方式
不同技术栈写法不同,但逻辑一致:先定义策略,再挂载中间件或响应头。
-
Express.js:用
cors包,传对象配置origin、methods、credentials等字段 -
.NET Core:在
Program.cs用AddCors注册命名策略,再用UseCors("PolicyName")挂载 -
Nginx:在
location块里用add_header设置各 CORS 头,注意always参数确保错误响应也带头 -
Spring Boot:优先用
@CrossOrigin注解在 Controller 层,全局配置走CorsConfiguration+CorsWebFilter










