cors策略由服务器响应头控制,前端无法配置;关键头需配套使用,如access-control-allow-origin与access-control-allow-credentials必须一致,预检请求需正确响应,不同后端框架有对应配置方式。

CORS 策略不能由 JavaScript 配置,它完全由服务器响应头控制。前端代码无需、也无法“设置”CORS;真正起作用的是后端在 HTTP 响应中返回的 Access-Control-Allow-* 头。JavaScript(如 fetch)只是发起请求,浏览器自动检查这些头并决定是否放行响应。
关键响应头必须配套使用
单设某一个头是无效的,常见组合缺一不可:
-
Access-Control-Allow-Origin:必须明确指定可信源,如
https://admin.example.com;若需携带 Cookie 或 Token,严禁设为* -
Access-Control-Allow-Credentials:设为
true时,Origin必须是具体域名,且前端fetch需加credentials: 'include' -
Access-Control-Allow-Methods:只列实际用到的方法,例如
GET, POST, PATCH;避免开放DELETE或OPTIONS给无关接口 -
Access-Control-Allow-Headers:仅允许业务必需的头,如
Content-Type, Authorization;不要用*(部分浏览器不支持)
预检请求(OPTIONS)必须正确响应
当请求含自定义 header、非简单 Content-Type(如 application/json),或使用 PUT/DELETE 等方法时,浏览器会先发 OPTIONS 请求。此时服务端必须:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对
OPTIONS路径返回204 No Content或200 OK - 在响应中包含全部所需 CORS 头(同上)
- 不执行业务逻辑,仅做权限协商
不同后端的典型配置方式
核心逻辑一致,写法因框架而异:
-
Express.js:用
cors中间件,传入对象配置:cors({ origin: 'https://app.com', credentials: true, methods: ['GET', 'POST'] }) -
Nginx:在
location块中添加:add_header 'Access-Control-Allow-Origin' 'https://app.com'; add_header 'Access-Control-Allow-Credentials' 'true'; -
Spring Boot:在 Controller 方法上加注解:
@CrossOrigin(origins = "https://app.com", allowCredentials = "true") -
原生 Node.js:手动设置响应头:
res.setHeader('Access-Control-Allow-Origin', 'https://app.com');
前端调用保持简洁
只要后端配置正确,前端按标准方式发请求即可:
- 带凭证的请求:
fetch('/api/user', { method: 'POST', credentials: 'include', body: JSON.stringify(data) }) - 普通请求:
fetch('/api/list')—— 浏览器自动带上Origin,服务端匹配后即放行 - 不需要在 JS 里写任何 CORS 相关逻辑,也不需要拦截或重写请求
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










