You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Gateway跨域请求拦截:Access-Control-Allow-Origin头多值异常

解决Spring Cloud网关CORS响应头重复问题

问题分析

核心问题是响应中返回了重复的Access-Control-Allow-Origin头,触发浏览器CORS拦截规则。原因在于:

  • 网关已配置全局CORS规则,会自动添加跨域响应头
  • 后端Spring Boot应用可能也单独配置了CORS,导致同一响应头被重复输出
  • Postman不受浏览器CORS策略限制,因此请求能正常执行

解决方案

1. 关闭后端服务的CORS配置

既然通过网关统一处理跨域,后端服务无需再单独配置CORS。检查所有后端应用,移除以下相关配置:

  • 代码中的@CrossOrigin注解
  • 配置类里的CorsConfiguration相关Bean
  • application.yml/application.properties中的CORS配置项

2. 调整网关的去重过滤器配置

修改网关的application.yml,优化DedupeResponseHeader过滤器的配置,确保正确去重重复的CORS响应头:

cloud:
  gateway:
    default-filters:
      # 明确指定去重策略为保留第一个出现的响应头
      - DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_FIRST
    globalcors:
      corsConfigurations:
        '[/**]':
          allowedOrigins:
            - "http://localhost:3000"
            - "http://localhost:8000"
            - "http://frontend-ip-address:port"
          allowCredentials: true
          allowedMethods:
            - GET
            - POST
            - DELETE
            - OPTIONS
          allowedHeaders: "*"

注:清理了allowedMethods中重复的GET,不影响功能但配置更规范

3. 验证配置效果

重启网关和后端服务后,通过浏览器开发者工具查看响应头:

  • 确认Access-Control-Allow-Origin仅返回一个匹配当前请求Origin的值
  • 确认Access-Control-Allow-Credentials无重复

内容的提问来源于stack exchange,提问作者Batool Ragayah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:13:40