最近一直在编写关于前后端段分离的项目,后端 使用的是对应的 VUE+ELEMENT 做了权限验证等等方便,
当做前后端分离的时候,全是 ajax请求,而且有个迫切需要解决的问题,就是对应的 请求 每个请求都是=跨域的。
想到之前的 解决方案,记录一下。
跨域问题是 响应出了问题 不是请求问题,请求是可以请求到的 不过是 响应出了问题,因为跨域了导致的浏览器拦截了对应的响应数据。所以要解决响应问题。
最早的时候 我记得 是采用 JSONP的 方式,把回调函数的函数名返回给前端,前端自动调用回调函数 来解决跨域的问题。这样就可以避免跨域问题。
但是这种方式已经好久没有用到过了 ,所以就不在介绍了。因为 这种方式 限制很大,只能是 get请求
在 引入了springmvc后,在 版本是 4.2之后好像是,我不知道记得清楚不清楚了
这种的方式 是 在对应的方法上 加上相应的注解,这样就会 可以 支持跨域请求,这种的方式 适用于
小范围的方法 ,比如 提供外部的请求 ,导致的跨域 ,本身来说很小量的 方法,因为他只能对应一部分方法或者类 不是全量的请求,具体的使用方法为:CrossOrigin注解 适用于 方法上 还有类上
下面简单说下
origins : 允许可访问的域列表
maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。
使用起来没有任何的难度。 有可能是 一些情况导致跨域没失效。
类上没有 对应的bean 注解 就是 @Controller.
对应的响应方法没有对应的 get 或者post 请求方式的 加上就可以了。
这种方式 很方便但是 假如 每个 类上 都加上 也是很不友好。
下面就是介绍 最通用的方式:
一般情况下 都是在 拦截器上配置对应的 跨域请求的问题
//一般加上这几句 就行了 很简单
response.setHeader("Access-Control-Allow-Origin", "*");
//理解起来就是 Access-Control-Allow-Origin 允许跨域的请求 *代表所有请求
//代表任何的预请求都支持
response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Allow-Headers"));
response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); //这里要加上 OPTIONS 因为 跨域的时候 会 预请求一次 采用的方式 就是 OPTIONS