SpringBoot + Spring Cloud +Vue 管理系统后台搭建(五、CORS跨域解决)

本文介绍了跨域请求的基本概念,包括同源策略与跨域场景,并详细解析了CORS(跨源资源共享)机制的工作原理及其实现方式。文章还提供了一个简单的Spring Boot应用中配置CORS接口的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是跨域

如果请求地址里的协议、域名、端口号都相同就属于同源。任何一共不同就是跨域

http://www.a.com/a/a.html 和 http://www.a.com/b/b.html 同源

http://www.a.com/a/a.html 和 http://www.b.com/a/a.html  跨域 域名不同

http://www.a.com/a/a.html 和 https://www.a.com/b/b.html  跨域 协议不同

http://www.a.com/a/a.html 和 http://www.a.com:8080/b/b.html  跨域 端口不同

 

CORS是W3C提出的跨域资源共享方案,CORS将请求分为两大类:简单请求和非简单请求

只要同时满足以下两大条件,就属于简单请求。

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

凡是不同时满足上面两个条件,就属于非简单请求。

浏览器发起跨源请求,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

 

CORS技术可以在不破坏既有规则的情况下,通过后端服务器实现CORS接口,从而实现跨域通信

CORS实现也比较简单,在config包下新增CORS配置类,实现WebMvcConfigurer接口,代码如下:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 允许跨域访问的路径
                .allowedOrigins("*")   // 允许跨域访问的源
                .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
                .maxAge(168000)    // 预检间隔时间
                .allowedHeaders("*")  // 允许头部设置
                .allowCredentials(true);   // 是否发送cookie
    }
}

 

如果访问报错,When allowCredentials is true, allowedOrigins cannot contain the special value “*“ since that cannot

是因为新的springboot版本中,跨域配置需要将 .allowedOrigins 替换成 .allowedOriginPatterns,如下图

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值