The ‘Access-Control-Allow-Origin’ header contains multiple values “*, *”, but only one is allowed.
The ‘Access-Control-Allow-Origin’ header contains multiple values “*, *”, but only one is allowed.通常我们的跨域可以在三个地方解决通过配置类在后台代码解决。还可以通过注解在接口上解决。可以在业务网管层面解决。可以在nginx层面解决。以上的三种方式,假如用了两种。则会出现双重跨域的异常错误。解决方案如
·
The ‘Access-Control-Allow-Origin’ header contains multiple values “*, *”, but only one is allowed.
通常我们的跨域可以在三个地方解决
- 通过配置类在后台代码解决 。还可以通过注解在接口上解决。
- 可以在业务网管层面解决。
- 可以在nginx层面解决。
以上的三种方式,假如用了两种。则会出现双重跨域的异常错误。
解决方案
- 如果知道在哪里用了两次跨域的话,选择剔除一个地方也是可以的。假如在业务网关层统一解决跨域的,那就在代码层移除掉跨域的部分配置。
- 如果两个地方都不想移除,还可以在网管层通过配置,来忽略掉双重跨域的问题。
我的业务网管层,是使用的gateway。而双重跨域的解决方案我选择的是在gateway网关层解决。
spring:
main:
allow-bean-definition-overriding: true
gateway:
discovery: #是否与服务发现组件进行结合,通过 serviceId(必须设置成大写) 转发到具体的服务实例。默认为false,设为true便开启通过服务中心的自动根据 serviceId 创建路由的功能。
locator: #路由访问方式:http://Gateway_HOST:Gateway_PORT/大写的serviceId/**,其中微服务应用名默认大写访问,配置lowerCaseServiceId可用小写。
enabled: true
lowerCaseServiceId: true
#解决跨域问题
globalcors:
corsConfigurations:
'[/**]':
# 允许携带认证信息
allow-credentials: true
# 允许跨域的源(网站域名/ip),设置*为全部
allowedOrigins: "*"
# 允许跨域的method, 默认为GET和OPTIONS,设置*为全部
allowedMethods: "*"
# 允许跨域请求里的head字段,设置*为全部
allowedHeaders: "*"
#解决双重跨域 RETAIN_FIRST RETAIN_LAST RETAIN_UNIQUE
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE
其中发挥作用的是:
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献29条内容
所有评论(0)