网关配置跨域请求
关于跨域请求的详细介绍,请看官方文档
跨域访问流程

对于非简单请求,需要先发送预检请求,请求的流程为:
- 浏览器先发送一个OPTIONS预见请求给服务器
- 服务器检查请求过来携带域名是否允许跨域,如果允许则会相应允许跨域
- 浏览器接收到允许跨域的相应后才会真正发送真实的请求
- 服务器对真正的请求进行响应
解决跨域
可通过添加响应头来配置允许跨域。
-
Access-Control-Allow-Origin:指定了允许访问该资源的外域 URI。 -
Access-Control-Expose-Headers:让服务器把允许浏览器访问的头放入白名单。在跨源访问时,XMLHttpRequest对象的getResponseHeader()方法只能拿到一些最基本的响应头,Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma,如果要访问其他头,则需要服务器设置本响应头。
-
Access-Control-Max-Age:指定了preflight请求的结果能够被缓存多久。 -
Access-Control-Allow-Credentials:指定了当浏览器的credentials设置为true时是否允许浏览器读取response的内容。当用在对preflight预检测请求的响应中时,它指定了实际的请求是否可以使用credentials。请注意:简单 GET 请求不会被预检;如果对此类请求的响应中不包含该字段,这个响应将被忽略掉,并且浏览器也不会将相应内容返回给网页。 -
Access-Control-Allow-Methods:指明了实际请求所允许使用的 HTTP 方法。 -
Access-Control-Allow-Headers:指明了实际请求中允许携带的首部字段。
Gateway中配置跨域
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
//1.配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.setAllowCredentials(true);
source.registerCorsConfiguration("/**",corsConfiguration);
return new CorsWebFilter(source);
}
}

浙公网安备 33010602011771号