写点什么

前后端分离跨域问题解决方案

用户头像
Peision
关注
发布于: 2020 年 07 月 22 日
前后端分离跨域问题解决方案

前言

最近在写前后端分离项目的时候,遇到了前后端分离必须解决的跨域问题,而我起初只是在 Controller 层加上了注解@CrossOrigin(allowCredentials = "true"),暂时解决了跨域问题。但是在开发验证码的时候,始终获取不到session中的验证码字符,获取到的验证码字符始终为null,调试之后发现放入验证码字符的session与从session中获取验证码字符的session不是同一个session,这就又遇到了跨域问题,也就是说之前处理的跨域并不生效了,或者说之前并没有完全解决前后端分离跨域问题。



一、什么是CORS

CORS 是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了AJAX只能同源使用的限制。



它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持CORS、并且判断Origin通过的话,就会允许XMLHttpRequest发起跨域请求。



二、CORS Header

属性名词解释

Access-Control-Allow-Origin允许哪个域发起跨域请求

Access-Control-Allow-Methods设置允许跨域请求的方法

Access-Control-Max-Age设置在多少秒内无需再发送预校验请求

Access-Control-Allow-Headers允许跨域请求包含content-type

Access-Control-Allow-Credentials设置允许Cookie



三、跨域错误信息

错误一:前、后端均无跨域处理







错误二:前端跨域处理,后端无跨域处理





错误三:前端无跨域处理,后端跨域处理







四、跨域处理方法

前端处理方法



后端处理方法



1.在controller层加上@CrossOrigin注解





2.加一个全局跨域处理配置类

/**
* @description 全局跨域配置类
* @author: PeiChen
*/
@Configuration
public class GlobalCorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("PUT", "DELETE","GET","POST")
.allowedHeaders("*")
.exposedHeaders("access-control-allow-headers",
"access-control-allow-methods",
"access-control-allow-origin",
"access-control-max-age",
"X-Frame-Options")
.allowCredentials(false).maxAge(3600);
}
};
}
}

五、前后端分离成功跨域







前后端分离项目,就必须要克服跨域问题,至此,本篇文章介绍的跨域问题就先告一段落了。

发布于: 2020 年 07 月 22 日阅读数: 177
用户头像

Peision

关注

除非我不想赢,否则没人能让我输! 2020.07.03 加入

还未添加个人简介

评论

发布
暂无评论
前后端分离跨域问题解决方案