百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

SpringBoot 项目处理跨域的四种技巧

off999 2025-02-07 18:44 68 浏览 0 评论

上周帮一家公司优化代码时,顺手把跨域的问题解决了, 这篇文章,我们聊聊 SpringBoot 项目处理跨域的四种技巧 。

1 什么是跨域

我们先看下一个典型的网站的地址:

同源是指:协议、域名、端口号完全相同

下表给出了与 URL
http://www.training.com/dir/page.html 的源进行对比的示例 :

当用户通过浏览器访问应用(http://admin.training.com)时,调用接口的域名非同源域名(http://api.training.com),这是显而易见的跨域场景。

2 理解 CORS

CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing), 它需要浏览器和服务器同时支持他,允许浏览器向跨源服务器发送XMLHttpRequest请求,从而克服 AJAX 只能同源使用的限制。

跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站通过浏览器有权限访问哪些资源。

规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。

服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。

01 简单请求

当请求同时满足如下条件时,CORS验证机制会使用简单请求, 否则CORS验证机制会使用预检请求。

  1. 使用GET、POST、HEAD其中一种方法;
  2. 只使用了如下的安全首部字段,不得人为设置其他首部字段;
  3. Accept
  4. Accept-Language
  5. Content-Language
  6. Content-Type 仅限三种之一:text/plain,multipart/form-data,application/x-www-form-urlencoded:
  7. HTML头部 header field字段:DPR、Download、Save-Data、Viewport-Width、WIdth
  8. 请求中的任意 XMLHttpRequestUpload 对象均没有注册任何事件监听器;XMLHttpRequestUpload 对象可以使用 XMLHttpRequest.upload 属性访问;
  9. 请求中没有使用 ReadableStream 对象。

简单请求模式,浏览器直接发送跨域请求,并在请求头中携带 Origin 的头,表明这是一个跨域的请求。 服务器端接到请求后,会根据自己的跨域规则,通过
Access-Control-Allow-Origin 和
Access-Control-Allow-Methods 响应头,来返回验证结果。

02 预检请求

浏览器在发现页面发出的请求非简单请求,并不会立即执行对应的请求代码,而是会触发预先请求模式。预先请求模式会先发送preflight request(预先验证请求),preflight request是一个 OPTION 请求,用于询问要被跨域访问的服务器,是否允许当前域名下的页面发送跨域的请求。在得到服务器的跨域授权后才能发送真正的 HTTP 请求。

OPTIONS 请求头部中会包含以下头部:

服务器收到 OPTIONS 请求后,设置头部与浏览器沟通来判断是否允许这个请求。

如果 preflight request 验证通过,浏览器才会发送真正的跨域请求。

3 Nginx 配置

我们可以不用配置 SpringBoot 项目,可以在反向代理层 Nginx 配置 Cros ,典型配置如下图:

4 配置类实现 addCorsMapping 接口

SpringBoot 中新增一个配置类 CorsConfig.java,继承 WebMvcConfigurerAdapter 或者实现WebMvcConfigurer 接口,项目启动后,会自动读取配置。

5 CorsFilter 过滤器模式

下图是 SpringMvc 模式里,过滤器,拦截器,控制器的执行顺序。

CorsFilter 过滤器模式的优点是:优先级高,可以规避代码中业务拦截器异常导致 adCorsMappings 方法失效的问题。

我们需要定义一个 corsFilter 方法,@Bean 注解表示此方法返回一个Spring Bean,该 Bean 将由Spring 容器管理。

corsFilter() 方法定义了一个 FilterRegistrationBean,这个 bean 是用来注册 CorsFilter 的,后者用于处理 CORS 请求。

6 网关模式

在微服务架构体系中,网关是非常核心的组件。 API 网关可以做鉴权,限流,灰度等,同时可以配置 CORS 。内部服务端不用特别关注跨域这个问题。

因此假如是 SpringCloud 体系,我们只需要配置 SpringCloud gateway 的跨域即可。


  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS

相关推荐

办公软件office下载(office办公软件正版下载)

office字体都变成了英文是因为设置了英文模式。具体的解决步骤如下:我们需要准备的材料分别是:电脑、Word文档。1、首先我们打开Word文档,点击打开左上角的文件中的“选项”。2、然后我们在弹出来...

windows打开注册表(windows打开注册表编辑器的命令)

如果装了杀毒软件,并且开了注册表保护功能,关闭此功能,如果关闭后可以正常写入了,说明是这个问题造成的,之所以打开后不能写入了,是由于注册表保护功能的提示项目被关闭了,打开设置项目,打开提示即可,这样以...

win7本地组策略编辑器怎么打开

1、在桌面上新建一个记事本文件,随后双击打开它将下方的代码全部复制粘贴进去:  @echooff  pushd"%~dp0"  dir/bC:\Windows\servicing\Packag...

笔记本连接不上无线网(笔记本连接不上无线网络)

1、笔记本电脑连不上wifi原因有很多,如果是所有WIFI都连接不上,那就是电脑自身设置出错。2、方法一:电脑连不上wifi,图标会有黄色叹号,在右下角右键点击无线wifi图标,再点击打开网络和共享中...

国内杀毒软件(国内杀毒软件有哪些完整名单)

小米手机自带的安全中心中就有病毒扫描功能,可能小米与360不太兼容,不过我觉得小米自带的杀毒也可以的,不用再单独下载一个杀毒软件了,我觉得是软件问题,因为有的软件手机是不支持的,强行安装后就会出现启动...

tplink18r18e如何设置(tplink19216811路由器设置)

TL-H28R路由器恢复了出厂设置,现在要设置其连接宽带上网,需要经过以下几个步骤:1、TL-H28R路由器与TL-H28E扩展器注册;将TL-H28R路由器和TL-H28E扩展器分别插到电源插座上,...

win7现在还能用吗(win7现在还能用么2021年)
win7现在还能用吗(win7现在还能用么2021年)

WINDOWS7系统还可以用多久?什么时候会被淘汰?先不说WINDOWS7系统可以用多久,先说说XP系统到目前为止可以在系统之家上搜索,并且下载,只要硬件支持,XP系统都可以继续在使用,也不用担心,XP系统在使用的过程中系统出现崩溃或者...

2025-12-03 21:03 off999

免费下载升级(免费下载升级拖拉机两副牌80分)

以创维E530E系列为例:1、第一步:到创维社区下载官方本地升级包,将升级包放到U盘的根目录下,不能放到文件夹中否则检测不到升级包2、将U盘插入电视背后的USB接口。插上U盘后,电视会检测到U盘,选择...

win10家庭版是多少位(win10家庭版是32位吗)

win10家庭版包含32位win10家庭版和64位win10家庭版。32位操作系统针对的32位的CPU设计。CPU内部寄存器和寻址总线是32位,指令集可以运行32位数据指令,也就是说一次可以提取32位...

联想投诉电话人工服务(联想总部投诉热线95539有用吗)

投诉某家联想售后服务中心的话,你可以按照以下步骤来进行操作:1.收集证据:整理好所有的证据材料,包括维修单据、交流记录、照片或视频等,以便提供给投诉部门。2.联系联想客服:首先,你可以尝试通过联想...

win7旗舰版bios设置(win7旗舰版bios设置教程)

Win7旗舰版的BIOS高级模式指的是进入计算机主板的BIOS(基本输入输出系统)设置中的一种模式,该模式提供了更高级的设置选项,可以更好地控制硬件性能和外设的功能。高级模式比标准模式更加复杂,需要进...

怎么设置自己家的wifi(怎样设置自己家的wifi)

要设置家里的WiFi,首先确保你有一个无线路由器。将路由器连接到宽带调制解调器,并通过网线连接到电脑。打开浏览器,输入路由器的默认IP地址,登录路由器的管理界面。根据路由器的说明书,设置WiFi名称(...

xp万能驱动下载(winxp万能驱动)

查看自己打印机的型号,然后去官网下载对应的驱动使用纯净版XP系统的时候还要安装声卡驱动,当我们对这个方面的驱动都完全的安装好了之后,这样才可以更好地保障今后的使用。电脑之中,只是安装系统还是无法使用的...

主机亮了显示器黑屏(主机亮了显示器黑屏怎么办)

1、如果按键盘、移动鼠标都没反应,那么你的电脑有可能进入了休眠状态,这个时候需要按下电源按钮以此来唤醒电脑;电脑休眠指的是将当前处于运行状态的数据保存在硬盘中,整机将完全停止供电。在休眠时可以完全断开...

美国vs威尔士比分预测(威尔士vs美国直播)

同学你好,这所大学创校于1914年,是一所综合性的私立大学。它设有47项学位,包含商业课程、烹饪艺术、餐饮管理及教育等,提供学生良好的就业机会。所有的学系均设有学士、硕士。不仅限于本科。但是这所...

取消回复欢迎 发表评论: