前后端分离跨域方案

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

前言

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

前后端分离项目,就必须要克服跨域问题,至此,本篇文章介绍的跨域问题就先告一段落了。
目录
相关文章
|
10月前
|
Web App开发 JSON 前端开发
前端跨域解决方案-汇总
前端跨域解决方案-汇总
133 0
|
2月前
|
存储 前端开发 JavaScript
跨域问题以及解决方案
跨域问题以及解决方案
41 0
|
3月前
|
安全 Java 应用服务中间件
详细介绍几种处理后端跨域问题的方案
详细介绍几种处理后端跨域问题的方案
|
3月前
|
JSON 前端开发 JavaScript
前端如何实现跨域
前端如何实现跨域
|
4月前
|
运维 前端开发 JavaScript
关于跨域,和跨域问题的完整解决方案
关于跨域,和跨域问题的完整解决方案
44 0
|
4月前
|
Web App开发 移动开发 运维
跨域解决方案[前端+后端]
跨域解决方案[前端+后端]
69 0
|
移动开发 前端开发 JavaScript
前端跨域的解决方案?
前端跨域的解决方案?
92 0
|
4月前
|
JSON JavaScript 前端开发
跨域的原理及解决方案
同源策略是Web应用程序安全性模型中的重要概念。根据该策略,Web浏览器允许第一个网页中包含的脚本访问第二个网页中的数据,但前提是两个网页具有相同的来源。来源由URI,主机名和端口号的组合定义。此策略可防止一个页面上的恶意脚本通过该页面的DOM(Document Object Model)获得对另一网页上敏感数据的访问。 JSONP 由于同源策略,一般来说位于server1.example.com...
|
移动开发 前端开发 安全
【前端跨域的解决方案?】
【前端跨域的解决方案?】
|
移动开发 JavaScript 前端开发
前端常见跨域解决方案(全)
前端常见跨域解决方案(全)
830 0