我最新最全的文章都在 南瓜慢说 www.pkslow.com ,欢送大家来喝茶!

1 跨源资源共享CORS

跨源资源共享 (CORS) (或艰深地译为跨域资源共享)是一种基于HTTP 头的机制,该机制通过容许服务器标示除了它本人以外的其它origin(域,协定和端口),这样浏览器能够拜访加载这些资源。

首先要明确的是,浏览器拜访资源才会有CORS的存在,如果通过其它HTTP Client等代码,就不会呈现。CORS简略一点讲就是当在浏览器地址栏的源Origin与所拜访的资源的地址的源不同,就是跨源了。比方在前后端拆散的开发中,UI的地址为http://localhost:3000,而服务的地址为http://localhost:8080,通过JavaScript获取服务的数据,就须要跨源。

1.1 预检preflight

对那些可能对服务器数据产生副作用的 HTTP 申请办法(特地是 GET 以外的 HTTP 申请,或者搭配某些 MIME 类型的 POST 申请),浏览器必须首先应用 OPTIONS 办法发动一个预检申请(preflight request),从而获知服务端是否容许该跨源申请。服务器确认容许之后,才发动理论的 HTTP 申请。

所以,CORS是须要服务器端关上的一个个性,而不是客户端

对于简略申请,不须要预检:

预检个别是通过OPTION办法来进行:

须要留神:

申请的首部中携带了 Cookie 信息(credentials:include),如果 Access-Control-Allow-Origin 的值为“*”,申请将会失败。

2 kubernetes ingress关上CORS

能够在ingress层面关上CORS,而不必在利用层面。配置如下:

annotations:kubernetes.io/ingress.class: "nginx"nginx.ingress.kubernetes.io/enable-cors: "true"nginx.ingress.kubernetes.io/cors-allow-origin: "*"nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS, DELETE"nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-CustomHeader,X-LANG,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-Api-Key,X-Device-Id,Access-Control-Allow-Origin"

当思考到某些场景不能使allow-origin*,所以能够按上面这样配置:

nginx.ingress.kubernetes.io/enable-cors: "true"nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"nginx.ingress.kubernetes.io/cors-allow-credentials: "true"nginx.ingress.kubernetes.io/configuration-snippet: |    more_set_headers "Access-Control-Allow-Origin: $http_origin";

3 spring cloud gateway关上CORS

能够通过配置properties来实现,也能够通过Java配置WebFilter来实现。

spring:  cloud:    gateway:      globalcors:        cors-configurations:          '[/**]':            allowedOrigins: "https://www.pkslow.com"            allowedMethods:            - GET

Java的形式大抵如下:

@BeanCorsWebFilter corsWebFilter() {    CorsConfiguration corsConfig = new CorsConfiguration();    corsConfig.setAllowedOrigins(Arrays.asList("https://www.pkslow.com"));    corsConfig.setMaxAge(8000L);    corsConfig.addAllowedMethod("PUT");    UrlBasedCorsConfigurationSource source =      new UrlBasedCorsConfigurationSource();    source.registerCorsConfiguration("/**", corsConfig);    return new CorsWebFilter(source);}

欢送关注微信公众号<南瓜慢说>,将继续为你更新...

多读书,多分享;多写作,多整顿。