网关配置跨域请求

关于跨域请求的详细介绍,请看官方文档

跨域访问流程

浏览器跨域访问流程

对于非简单请求,需要先发送预检请求,请求的流程为:

  1. 浏览器先发送一个OPTIONS预见请求给服务器
  2. 服务器检查请求过来携带域名是否允许跨域,如果允许则会相应允许跨域
  3. 浏览器接收到允许跨域的相应后才会真正发送真实的请求
  4. 服务器对真正的请求进行响应

解决跨域

可通过添加响应头来配置允许跨域。

  • 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);
    }
}
posted @ 2021-03-22 00:19  bGpi  阅读(872)  评论(0)    收藏  举报