当前位置: 首页 > article >正文

前后端分离开发出现的跨域问题

先说说什么是跨域。

请求的URL地址中的协议、域名、端口号中的任意一个与当前URL不同就是跨域。

 比如:

当前页面的URL请求的URL是否跨域原因
htttp://localhost:8080htttps://localhost:8080协议不同
htttp://localhostll:8080htttp://localhost:8080域名不同
htttp://localhost:8080htttp://localhost:8081端口号不同

那么,为什么会出现跨域问题?

这都是因为浏览器的同源策略,为了保证浏览器安全,防止恶意的网站攻击,浏览器限制了从不同源之间的交互。在不同源的情况下,无法发送Ajax请求,如果请求,浏览器就会报错。

这里我的前端跑在8081端口下,后端跑在8080端口上 ,虽然协议和域名都相同,但是端口号不同,这种情况就是跨域问题了,所以前端页面向后端发送请求就报错了。

这里有三种解决方案,且都是后端的解决方案:

报错信息截图:

SpringBoot项目中解决跨域的3中方案:

第一种: 在目标方法上添加@CrossOrigin注解

 

 

 

添加注解后,重新启动项目,前端发送请求,后端接收到请求后并成功响应了请求。

 

 第二种:开启跨域资源共享

跨域资源共享,Cross-Origin Resource Sharing,简拼为 CORS,是一种基于 HTTP 头信息的机制,通过允许服务器标识除了它自己以外的资源,从而实现跨域访问。

添加一个配置类就ok了。

@Configuration
public class CorsConfig {

    @Bean
    public CorsFilter corsFilter(){
        CorsConfiguration configuration = new CorsConfiguration();
        //设置允许的域名
        configuration.addAllowedOrigin("*");
        //设置原始头信息
        configuration.addAllowedHeader("*");
        //设置允许所有的请求方法跨域调用
        configuration.addAllowedMethod("*");
        //创建source对象
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //添加映射路径
        source.registerCorsConfiguration("/**",configuration);
        return new CorsFilter(source);
    }
}

 

第三种: 实现WebMvcConfigurer接口,重写addCorsMappings方法

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET","DELETE","PUT","POST","HEAD","OPTIONS")
                .allowCredentials(true)
                .allowedHeaders("*");
    }
}

 

 

 

 

 

 


http://www.kler.cn/news/149592.html

相关文章:

  • 压缩字符串II
  • Maven 介绍
  • C语言基础程序设计题
  • 爬虫如何确定HTTP代理IP是否符合自己业务需求?
  • Android 13.0 app进程保活白名单功能实现
  • Python语言学习笔记之二(基础语法)
  • leetcode 611. 有效三角形的个数(优质解法)
  • 去水印软件有哪些?亲测四款好用去水印神器
  • redis使用
  • “rhdf5filters.so’ not found when install ‘glmGamPoi‘ package
  • AUTOSAR系统服务篇 - BswM
  • RPG项目01_UI登录
  • 如何在 Vim 中剪切、复制和粘贴
  • leetcode 打家劫舍
  • [栈溢出+参数跟踪] [ZJCTF 2019]Login
  • 【LeetCode】挑战100天 Day13(热题+面试经典150题)
  • Excel导入组件的封装以及使用页面点击弹出该弹框
  • Nature子刊最新研究:Hi-C宏基因组揭示土壤-噬菌体-宿主相互作用
  • Django请求生命周期流程
  • Android WiFi的断开分析
  • ChatGPT到底是如何运作?
  • 水淹七军(递归,又是递归)
  • 【Unity记录】EDM4U(External Dependency Manager)使用说明
  • temu反洗钱协议在哪里签署
  • HashMap源码解析
  • 批量采集淘宝商品数据,有哪些方式可以实现?
  • 【Spark源码分析】事件总线机制分析
  • Python超级详细的变量命名规则
  • uniApp应用软件在运行时,未见向用户告知权限申请的目的,向用户索取(存储、相机、电话)等权限,不符合华为应用市场审核标准。
  • PostgreSQL数据库中的后台进程