关于跨域访问

最近一直在编写关于前后端段分离的项目,后端 使用的是对应的 VUE+ELEMENT 做了权限验证等等方便,

当做前后端分离的时候,全是 ajax请求,而且有个迫切需要解决的问题,就是对应的 请求 每个请求都是=跨域的。

想到之前的 解决方案,记录一下。

跨域问题是 响应出了问题 不是请求问题,请求是可以请求到的 不过是 响应出了问题,因为跨域了导致的浏览器拦截了对应的响应数据。所以要解决响应问题。

最早的时候 我记得 是采用 JSONP的 方式,把回调函数的函数名返回给前端,前端自动调用回调函数 来解决跨域的问题。这样就可以避免跨域问题。

但是这种方式已经好久没有用到过了 ,所以就不在介绍了。因为 这种方式 限制很大,只能是 get请求 

在 引入了springmvc后,在 版本是 4.2之后好像是,我不知道记得清楚不清楚了

这种的方式 是 在对应的方法上 加上相应的注解,这样就会 可以 支持跨域请求,这种的方式 适用于 

小范围的方法 ,比如 提供外部的请求 ,导致的跨域 ,本身来说很小量的 方法,因为他只能对应一部分方法或者类 不是全量的请求,具体的使用方法为:CrossOrigin注解 适用于 方法上 还有类上

关于跨域访问_第1张图片

下面简单说下 

关于跨域访问_第2张图片

 

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

 

 

你可能感兴趣的:(关于跨域访问)