Skip to content

网关 CORS 跨域资源共享

  • CORS,全称Cross-Origin Resource Sharing, 是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domain)的脚本请求访问的机制, 通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。
  1. 在 Spring MVC 中,仅存在 MVC 跨域配置
  2. 在 Spring Security 中,存在 MVC 跨域、Security 跨域
    1. Security 跨域 配置 将覆盖 MVC 跨域 配置
  3. 在 Spring Cloud 中,存在 网关 跨域 配置
    1. 如果请求通过网关,则仅需要配置网关跨域
    2. 如果请求不通过网关(可能在开发测试时使用),则需要配置 被访问项目 的 MVC 跨域 或 网关 跨域
      1. 被访问项目 未使用 Security,则需要配置 MVC 跨域
      2. 被访问项目 使用了 Security,则需要配置 Security 跨域
      1. 若前端开发环境,在项目中配置了跨域(仅在项目运行时有效,打包后无效),前端打包后的测试环境往往使用 Nginx 部署, 则开发环境与测试环境不同,可能会造成未知问题
      2. 若线上环境使用 对象储存,而非 Nginx 部署,则无法通过配置 Nginx 修改代理等配置,可能会造成未知问题
名称文档说明
网关 CORS 跨域资源共享本文
Security CORS 跨域资源共享链接
MVC CORS 跨域资源共享链接

配置

yaml
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: "*"