什么是跨域以及如何去解决?

前言

最近发现很多新手都不了解什么是跨域,以及怎么去解决跨域的问题,因此写了这篇文章

什么是跨域?

假如启动两个工程,一个vue,一个springboot工程,如果现在我想要用vue去调用springboot的后端接口,后端接收到请求并且返回结果了,但是浏览器把这个响应拦截了。

那么为什么浏览器要这么干呢?这是因为浏览器的同源策略。

同源策略:浏览器中的一种安全策略,为了限制不同源之间的交互,避免一些浏览器之间的攻击,不同源的请求是无法进行交互来保证安全。

那么怎么才算是同源呢? 协议、域名、端口都相同就是同源

例子
vue:http://localhost:8080
springboot:http://localhost:8081/xing

他们两个的协议都是http,域名都是localhost,但是端口不一致,一个8080,一个8081,所以他们不是同源的,就导致了跨域。

如何解决跨域问题

讲如何解决这个问题前,要先解释一下CORS策略
CORS策略: (Cross Origin Resource Sharing)跨域资源共享,其实就是由一系列http头组成的,http头决定浏览器是否阻止前端代码来读取由跨域请求过来的响应。所以我们只要在这些http头中添加一些配置让前端读取这些响应就可以了。

在Spring Boot项目中解决跨域的三种方法

1.在目标方法上添加@CrossOrigin

2.添加CORS过滤器

添加一个过滤器

@Configuration
public class CorsConfigure {
    @Bean
    public CrosFilter crosFilter(){
        org.springframework.web.cors.CorsConfiguration = new CorsConfiguration();
        //设置http头信息,是否阻止浏览器对响应的读取,允许哪些请求通过
        //设置允许哪些域来访问
        corsConfiguration.addAllowedOrigin("*");
        //设置允许哪些头字段
        corsConfiguration.addAllowedHeader("*");
        //设置允许哪些请求方式,例如(get,post)
        corsConfiguration.addAllowedMethod("*");
        //创建source对象
        urlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsConfigure(source);
    }
}

3.实现接口WebMvcConfigurer接口,重写addCrosMappings方法(常用)

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //设置映射
        registry.addMapping("/**")
                //设置允许哪些域来
                .allowedOrigins("*")
                //设置允许哪些方法
                .allowedMethods("GET","POST","PUT","DELETE","HEAD","OPTIONS")
                //是否可以携带cookie
                .allowCredentials(true)
                //设置有效期
                .maxAge(3600)
                .allowedHeaders("*");
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十三豆啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值