如何解决跨域

1 方式1 配置当次请求允许跨域

第一步给服务器添加响应头:

Access-Controll-Allow-Origin:表示支持哪些来源的请求跨域

Access-Controll-Allow-Methods:表示支持哪些方法跨域

Access-Controll-Allow-Credentials:跨域请求默认不包含cookie,设置为true可以包含cookie

Access-Controll-Expose-Headers:跨域请求暴露的字段

CORS请求时,XMLHttpRequest对象的方法getResponseHeader默认只能拿到六个基本的请求头字段,Cache-Controll,Content-Language,Content-Type,Expires,Last-Modified,Progma,如果想拿到其他字段就必须在Access-Controll-Expose-Headers指定

Access-Controll-Max-Age:表明该响应的有效时间为多少秒,在有效时间内浏览器无需为同一请求再次发起预检请求,浏览器自身维护一个最大的有效时间,如果该首部字段的有效时间超过最大的值,将不会生效

第二步:我使用的后端服务是spingboot,所以我直接给网关配置,当所有的请求过来将响应返回给客户端之前往响应头添加第一步的字段,就可以实现跨域访问

我使用的是spring-gateway作为网关,而其是响应式反应

所以使用这个filter:org.springframework.web.cors.reactive.CorsWebFilter

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;

@Configuration
public class GatewayCORSConfiguration {

    @Bean
    public CorsWebFilter corsWebFilter(){
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();

        CorsConfiguration corsConfiguration=new CorsConfiguration();

        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.setAllowCredentials(true);

        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}

 

posted @ 2021-08-17 22:38  白羽轻飘  阅读(53)  评论(0编辑  收藏  举报