目录
一:解决问题
遇到错误:
前端请求时报错
解决:
网关中添加配置文件,注意springboot版本,添加配置。
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.util.pattern.PathPatternParser;
@Configuration
public class CorsConfig {
// 该配置适用于reactive响应式环境
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); //是否允许携带cookie
// config.addAllowedOrigin("*"); //可接受的域,是一个具体域名或者*(代表任意域名)
// springboot升级成2.4.0以上时对AllowedOrigin设置发生了改变,不能有”*“,可以替换成AllowedOriginPattern
config.addAllowedOriginPattern("*");
config.addAllowedHeader("*"); //允许携带的头
config.addAllowedMethod("*"); //允许访问的方式
config.setAllowCredentials(true);
// 必须是reactive包下的UrlBasedCorsConfigurationSource
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}
二:什么是跨域
常见的跨域场景包括:
- 主域名相同,子域名不同的场景,如 www.example.com 和 api.example.com
- 端口号不同,如 www.example.com:8080 和 www.example.com:8081
- 协议不同,如 http://www.example.com 和 https://www.example.com
三:cors跨域是什么?
CORS主要通过服务端的配置来实现跨域访问,主要有以下几点:
- 服务端的响应头中包含Access-Control-Allow-Origin字段,并指定允许请求资源的域名。
- 对预检请求进行处理,响应头中包含Access-Control-Allow-Methods等字段,表明允许的请求方法。
- CORS请求需要携带Origin字段,表示请求来源。
- 支持凭证的请求需返回Access-Control-Allow-Credentials字段。
- OPTIONS请求用于预检,以确定实际请求是否安全。
总之,CORS通过服务器配置请求域的白名单,并在头信息中进行沟通,来决定跨域请求是否可以发出,从而实现跨域资源访问。这是一个广泛应用的跨域解决方案。