前后端分离跨域方案

简介: 跨域相信大部分前后端协同开发的时候都会遇到,这对于初学者很是头疼,但是了解了以后就感觉也就那样吧。

前言

最近在写前后端分离项目的时候,遇到了前后端分离必须解决的跨域问题,而我起初只是在 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

三、跨域错误信息

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

session不一致

跨域1-1.png

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

跨域2-1.png

跨域错误信息

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

跨域3.png
跨域3-1.png

四、跨域处理方法

前端处理方法

后端处理方法

1.在controller层加上@CrossOrigin注解

跨域后端处理.png

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

/**
 * @description 全局跨域配置类
 * @date: 2020/6/14
 * @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);
            }
        };
    }
}

五、前后端分离成功跨域

跨域成功1.png
跨域成功2.png

前后端分离项目,就必须要克服跨域问题,至此,本篇文章介绍的跨域问题就先告一段落了。
目录
相关文章
|
5月前
|
Web App开发 JSON 前端开发
前端跨域解决方案-汇总
前端跨域解决方案-汇总
77 0
|
14天前
|
Web App开发 移动开发 运维
跨域解决方案[前端+后端]
跨域解决方案[前端+后端]
25 0
|
3月前
|
前端开发 JavaScript 安全
前后端分离项目知识汇总(开发流程,跨域,开发接口)
前后端分离项目知识汇总(开发流程,跨域,开发接口)
31 0
|
8月前
|
移动开发 前端开发 JavaScript
前端跨域的解决方案?
前端跨域的解决方案?
72 0
|
4月前
|
JSON 前端开发 JavaScript
前端跨域问题
前端跨域问题
38 0
|
4月前
|
JavaScript 前端开发 Java
CORS跨域问题(前后端全栈解决方式讲解)
CORS跨域问题(前后端全栈解决方式讲解)
41 0
|
8月前
|
移动开发 前端开发 安全
【前端跨域的解决方案?】
【前端跨域的解决方案?】
|
9月前
|
前端开发 Java API
前后端分离的跨域配置
前后端分离的跨域配置
|
9月前
|
移动开发 JSON 前端开发
前端跨域
跨域是指在浏览器中,一个页面的脚本试图去访问不同域名下的资源时,浏览器会阻止这种跨域的请求。这是为了保护用户的安全,防止恶意代码获取用户数据。但是,在一些场景下,我们需要进行跨域请求,这时就需要一些跨域解决方式。
|
移动开发 JavaScript 前端开发
前端常见跨域解决方案(全)
前端常见跨域解决方案(全)
748 0