我最新最全的文章都在南瓜慢说 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的方式大致如下:

@Bean
CorsWebFilter 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);
}

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

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

CORS跨源资源共享概念及配置(Kubernetes Ingress和Spring Cloud Gateway)的更多相关文章

  1. 彻底掌握CORS跨源资源共享

    本文来自于公众号链接: 彻底掌握CORS跨源资源共享 ) 本文接上篇公众号文章:彻底理解浏览器同源策略SOP 一.概述 在云时代,各种SAAS应用层出不穷,各种互联网API接口越来越丰富,H5技术在微 ...

  2. SpringBoot系列——CORS(跨源资源共享)

    前言 出于安全原因,浏览器禁止ajax调用当前源之外的资源(同源策略),我们之前也有写个几种跨域的简单实现(还在问跨域?本文记录js跨域的多种实现实例),本文主要详细介绍CORS,跨源资源共享,以及如 ...

  3. cors,跨域资源共享,Java配置

    一.概念 1. 如果两个页面的协议.域名和端口是完全相同的,那么它们就是同源的,不同则为跨域 2. ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允 ...

  4. JavaScript跨源资源共享

    CORS(跨 源资源共享)基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应式应该成功还是失败 IE对CORS的实现 IE8引入了XDR类型,与XHR类似,但可以实现安 ...

  5. 跨源资源共享(CORS)概念、实现(用Spring)、起源介绍

    本文内容引用自: https://howtodoinjava.com/spring5/webmvc/spring-mvc-cors-configuration/ https://developer.m ...

  6. CORS(跨域资源共享) 的配置

    http://blog.csdn.net/ohyoyo2014/article/details/24863197 兼容情况: 各种新版本的ie10,firefox,opera,safari,chrom ...

  7. CORS跨域资源共享你该知道的事儿

    "唠嗑之前,一些客套话" CORS跨域资源共享,这个话题大家一定不陌生了,吃久了大转转公众号的深度技术好文,也该吃点儿小米粥溜溜胃里的缝儿了,今天咱们就再好好屡屡CORS跨域资源共 ...

  8. 在ASP.NET Web API中实现CORS(跨域资源共享)

    默认情况下,是不允许网页从不同的域访问服务器资源的,访问遵循"同源"策略的原则. 会遇到如下的报错: XMLHttpRequest cannot load http://local ...

  9. CORS跨域资源共享漏洞

    CORS漏洞其中已经存在很久了,但是国内了解的人不是很多,文章更是少只有少,漏洞平台也没有此分类. 在DefConChina之后写了一篇算是小科普的文章. 定义CORS,Cross-Origin Re ...

随机推荐

  1. 在Visual Studio 中使用git——文件管理-中(五)

    在Visual Studio 中使用git--什么是Git(一) 在Visual Studio 中使用git--给Visual Studio安装 git插件(二) 在Visual Studio 中使用 ...

  2. (四)Jira Api对接:缺陷分析和任务分析

    迭代进行期间或者结束后,在我们的测试日报或者测试报告中需要体现缺陷详细情况,甚至大家工作效率情况.本文就讨论下如何通过jira api获取缺陷信息并进行分析,同时获取需求子任务情况来了解测试和开发的工 ...

  3. ElasticSearch7使用指导

    目录结构: 一.es概述 二.es安装/head插件安装/kibana安装 三.es核心概念 四.IK分词器 五.RestFul操作 六.CRUD(增删改查) 七.Springboot集成es --- ...

  4. java基础——参数的应用

    命令行传递参数(少用) 有时候,你希望运行一个程序时,在传递给它信息.这个时候,要靠 传递命令行 参数 给main()函数实现. package com.dong.method;​public cla ...

  5. [DB] HDFS

    体系架构 NameNode HDFS主节点.管理员 接收客户端(命令行.Java程序)的请求:创建目录.上传.下载.删除数据 管理和维护HDFS的日志和元信息 日志文件(edits文件) 二进制文件, ...

  6. 【转载】使用rdp协议访问远程Linux桌面

    使用rdp协议访问远程Linux桌面 2017年03月31日 16:23:49 太阳之影 阅读数:2169   一般情况下,如果需要登陆远程Linux系统,我们会使用ssh/telnet来完成,如果需 ...

  7. 理解RESTful架构——Restful API设计指南

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  8. IEEE754标准

    以下计算按规格化规定: S:符号位 M:分数值 E:指数偏移值 单精度浮点数(32bit): NUM_single = (-1)^S *  1.M   *   2^(E-127) 双精度浮点数(64b ...

  9. BUUCTF(八)[极客大挑战 2019]LoveSQL

    BUUCTF 1.打开题目 注入方法可参考NewsCenter 2.测试注入点 username: 1'or'1=1 password: 1'or'1=1 登录成功,说明存在注入漏洞. 下面测试位点个 ...

  10. MyBatis 单表CURD操作(五)

    MyBatis的CURD操作 添加CURD接口方法 package mapper; import entity.UserEntity; import org.apache.ibatis.annotat ...