F12控制台报错:Access to XMLHttpRequest at 'XXX from origin ' http://localhost:8001' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values ' http://localhost:8001, http://localhost:8001', but only one is allowed.
实际后台请求成功了,但是还是显示报错然后发现出现重复headers,标头只能一个。
解决方法
就是去除掉多次的跨域配置,只保留一次。比如我在网关配置了一个跨域,然后使用子项目时里面的config又配置有跨域,所以我们需要把子项目里的跨域配置注释掉只保留的网关的跨域配置。或者在微服务跨域配置中增加
spring:
cloud:
gateway:
default-filters:
- DedupeResponseHeader=Access-Control-Allow-Origin Access-Control-Allow-Credentials Vary, RETAIN_UNIQUE
security跨域配置:
gateway网关跨域配置:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.server.WebFilter;
import org.springframework.web.util.pattern.PathPatternParser;
/**
* 跨域配置
*
* @author zc
*/
@Configuration
public class CorsConfig
{
@Bean
public WebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedMethod("*");
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
//允许携带cookie的地址进行跨域
config.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new
PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
总结微服务中解决跨域问题主要分为如下情况:
情况1:针对单个服务的跨域问题,增加允许跨域配置类即可。
如,前端vue+单业务微服务
情况2:有网关时,网关配置允许跨域,微服务不配置。微服务项目网关服务为Gateway,则要求所有请求统一走网关,无需给每个微服务都配置跨域,只需要给网关微服务gateway配置跨域即可。
如,前端vue+网关服务gateway+业务微服务
情况3:有网关时,网关配置允许跨域,微服务配置允许跨域。需要在网关的配置里加上重复请求头。配置DedupeResponseHeader=Vary Access-Control-Allow-Origin Access-Control-Allow-Credentials, RETAIN_UNIQUE。此时走不走网关,都没有跨域问题。
如,前端vue+网关服务gateway+业务微服务/认证授权微服务
情况4:网关不配置,微服务配置允许跨域。请求如果走网关,则会存在跨域问题。不走网关,直接访问微服务,没有跨域问题。文章来源:https://www.toymoban.com/news/detail-479856.html
情况5:网关不配置,微服务不配置。走不走网关都会存在跨域问题。文章来源地址https://www.toymoban.com/news/detail-479856.html
到了这里,关于gateway网关导致多重跨域问题The ‘Access-Control-Allow-Origin‘ header contains multiple values的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!