SpringBoot进阶之处理跨域问题(CORS)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot进阶之处理跨域问题(CORS)相关的知识,希望对你有一定的参考价值。

参考技术A

大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫

「大佬可以绕过 ~」

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了 Springboot 基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础 中间件 的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有 收获 ~

上期带大家学习了 Springboot 中如何集成 MyBatis分页插件PageHelper 以及它的一个基本使用, 本期将带大家学习 SpringBoot 中如何处理跨域问题的,同样的,我们集成到 Springboot 中。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码

同样的,为了照顾小白同学,依然先说一下啥是跨域。说到跨域问题,如果你是 前端 同学,肯定不会陌生, 你有可能调接口调着调着,发现请求发布出去,控制台会报 CORS 错误, 这时候你会找后台老大哥给你处理一下。然而现在前端工程中,一般都会有 proxy代理 ,这样也能解决问题,这只是本地调试,但上线还会有问题, 除非你发布的时候你们是同一个 下。

好,说了这么多,大概明白跨域是如何产生了,就是说前端调用的后端接口不属于同一个 域(域名或端口不同) ,就会产生跨域问题,也就是说你的应用访问了该应用域名或端口之外的域名或端口,这里给大家总结一下,产生跨域的三个条件:

解决思路大致可以分为以下几方面:

从源头浏览器解决,解除跨域机制,用户自己设置浏览器,这不大现实,好, pass

发送 JSONP 请求替代XHR请求,并不能适用所有的请求方式, 不推荐

之前我们提到前端本地工程开启 Proxy ,那么服务端可不可进行代理呢?答案是可以的,怎么做?可以通过 nginx 进行代理,给大家简单演示一下:

nginx 是当今比较火的 web 服务器,常用于服务代理, 等教大家部署的时候会讲一下

这也是本节要讲的内容,我们先不直接的给大家展示代码,先说一下它的原理。

一般我们下载的浏览器比如 Chrome ,它都是自行默认开启 跨域限制 的,那我们如何判断我们发出去的请求是一个 跨域请求 呢,打开浏览器开发者工具,在请求的请求头中就可以发现,如果不是一个跨域请求,它只有 Host ,如果是一个 跨域请求 它会多一个 Origin ,告诉浏览器我俩请求的地方不一样

跨源资源共享(CORS) 是一种基于 HTTP头 的机制,该机制通过允许服务器标示除了它自己以外的其它 origin(域,协议和端口 ),这样浏览器就可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的 预检(OPTION) 请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头,那么具体是怎么设置 的呢?

服务端通过设置如上,就可以进行跨域访问了。好,有了基本的理论之后,我们一起看一下在 Springboot 中如何解决的:

是不是很简单~ 它的实现机制主要是通过请求 拦截器 实现的,你慢慢会发现,随着学习的深入,你会遇到各种 拦截器 技术

本期到这里就结束了,总结一下,本节主要带大家认识了什么是 跨域 ,以及解决思路,最后教大家 Sprinboot 中是如何配置跨域访问的,源码已更新,大家可以自行试一下

以上是关于SpringBoot进阶之处理跨域问题(CORS)的主要内容,如果未能解决你的问题,请参考以下文章

springboot跨域CORS处理

springboot解决跨域问题(Cors)

springboot webapi 支持跨域 CORS

springboot解决跨域问题跨域

springboot如何解决跨域问题?

springboot 跨域处理示例代码