首页 > 其他分享 >前后端分离跨域方案

前后端分离跨域方案

时间:2023-07-27 23:06:43浏览次数:31  
标签:Control 分离 跨域 前后 验证码 Access session Allow

前言

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

三、跨域错误信息

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

前后端分离跨域方案_跨域

前后端分离跨域方案_跨域_02

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

前后端分离跨域方案_跨域问题_03

前后端分离跨域方案_跨域_04

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

前后端分离跨域方案_跨域问题_05

前后端分离跨域方案_跨域问题_06

四、跨域处理方法

前端处理方法

前后端分离跨域方案_跨域_07

后端处理方法

1.在controller层加上@CrossOrigin注解

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);
            }
        };
    }
}

五、前后端分离成功跨域

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

标签:Control,分离,跨域,前后,验证码,Access,session,Allow
From: https://blog.51cto.com/u_16167640/6874965

相关文章

  • nginx跨域配置
    add_headerAccess-Control-Allow-Credentialstrue;add_headerAccess-Control-Allow-Headers$http_access_control_request_headers;add_headerAccess-Control-Allow-Methods'POST,GET,OPTIONS,DELETE,PUT,HEAD,PATCH';add_headerAccess-Control-All......
  • 解决跨域问题
    一、部署在IIS上跨域1.打开IIS管理,找到网站 2.找到HTTP响应头标 3.打开HTTP响应头标 添加:Access-Control-Allow-Origin:*二、Nginx跨域location/api{proxy_passhttp://b.com/;#设置是否允许cookie传输ad......
  • 跨域问题
    跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的。......
  • 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍
    一、伺服刹车关键词:急停,急停中间继电器、刹车中间继电器,刹车使能正文:通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠。伺服刹车硬件,一般是24v电源给进去,就会释放刹车使能。拿一个Z轴伺服作为对象。1.程序上控制逻辑如下急停按钮一般都是NC触点串联......
  • 跨域iframe 配置fullscreen权限
    在新版本的Chrome等浏览器中,默认情况下禁止了跨域iframe开启全屏的权限。在iframe中,我们通常使用 element.requestFullscreen() 方法来进行全屏展示。根据MDN文档,为了让iframe展示全屏,我们需要配置 allowfullscreen 属性,注意这个属性已经被重新定义为 allow="fulls......
  • python的csv文件里用逗号分离数据
    使用Python分割CSV文件引言在数据处理的过程中,经常需要对CSV(逗号分隔值)文件进行处理。CSV文件是一种常见的用于存储表格数据的文件格式,其中数据以逗号分隔。本文将介绍如何使用Python来实现将CSV文件中的数据按照逗号进行分割的方法。方法概述下面是实现分割CSV文件的方法概述:......
  • 解决非同源跨域不带cookie问题(原生、axios、fetch写法)
    原生js写法varxhr=newXMLHttpRequest();xhr.open('GET','http://localhost:7001/api/userinfo',true);xhr.withCredentials=true;//开启withCredentialsxhr.onreadystatechange=function(){if(xhr.readyState==4&&xhr.stat......
  • SpringBoot+Vue实现校园二手系统。前后端分离技术【完整功能介绍+实现详情+源码】
    前言       这个系统基本上可以改造为其它类似的系统。后台管理基本上一致。前台进行一些页面样式的改造就可以变成一个新的系统。有时间,做几个变体系统。       闲的无聊,把大学时候做的一个系统进行了重构。将项目拆分成完全前后端分离的形式。客户端采用一套、商家......
  • MySQL 主从复制与读写分离
    目录一、前言二、MySQL主从复制1.MySQL的复制类型2.MySQL主从复制的工作过程3.数据库主从数据不一致解决方案4.MySQL从服务器挂了恢复后怎么保证数据同步?5.半同步复制什么情况下会降为异步复制?什么时候又会恢复同步复制?三、MySQL主从复制延迟原因和优化方法1.主从复制延......
  • Blazor前后端框架Known-V1.2.6
    V1.2.6Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。Gitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor实现的快速开发框架,前后端分离,开箱即用。跨平台,单页应用,混合桌面应用,Web和桌面......