- CORS,全称Cross-Origin Resource Sharing,
是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制,
通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。
- 在 Spring MVC 中,仅存在 MVC 跨域配置
- 在 Spring Security 中,存在 MVC 跨域、Security 跨域
- Security 跨域 配置 将覆盖 MVC 跨域 配置
- 在 Spring Cloud 中,存在 网关 跨域 配置
- 如果请求通过网关,则仅需要配置网关跨域
- 如果请求不通过网关(可能在开发测试时使用),则需要配置 被访问项目 的 MVC 跨域 或 网关 跨域
- 被访问项目 未使用 Security,则需要配置 MVC 跨域
- 被访问项目 使用了 Security,则需要配置 Security 跨域
- 强烈不建议:在前端开发中配置前端跨域
- 违反 十二要素应用宣言
中的 X. 开发环境与线上环境等价
- 若前端开发环境,在项目中配置了跨域(仅在项目运行时有效,打包后无效),前端打包后的测试环境往往使用 Nginx 部署,
则开发环境与测试环境不同,可能会造成未知问题
- 若线上环境使用
对象储存,而非 Nginx 部署,则无法通过配置 Nginx 修改代理等配置,可能会造成未知问题
配置
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
# 配置跨域的路径,此处代表所有路径
# 此配置仅在网关启动时加载,无法通过配置中心修改(需要重启后才能生效)
'[/**]':
# 跨域时是否允许携带凭证
allow-credentials: true
# 跨域的来源
allowedOrigins:
- http://127.0.0.1:8000
- http://localhost:8000
- http://127.0.0.1:9000
- http://localhost:9000
- http://127.0.0.1:12000
- http://localhost:12000
# 跨域允许的 HTTP 方法
allowedMethods: "GET,POST"
# 跨域允许的请求头参数
allowedHeaders: "*"