跨域报错信息如下:

Access to XMLHttpRequest at 'http://localhost:8181/list' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

什么是同源策略?

如果两个URL的协议(http/https)、域名、端口 3 个都相同,那么就可以称这两个URL同源。

HTTP、HTTPS的区别?其中的s是什么意思?

        HTTP 和 HTTPS 是两种常见的网络协议,用于在客户端(如浏览器)和服务器之间传输数据。它们的主要区别在于安全性和数据传输方式。

        HTTP 和 HTTPS 的主要区别在于安全性。

        HTTP 传输的数据是明文的,没有加密,适用于不需要高安全性的场景。

        HTTPS 传输的数据是加密的,使用 SSL/TLS 协议进行加密,提供了数据的机密性、完整性和身份验证,适用于需要高安全性的场景。"S" 代表 "Secure",表示安全的意思。

Vue(前端):http://localhost:8080

Spring Boot(后端):http://localhost:8181/list

CORS:Cross Origin Resource Sharing

Spring Boot 项目中解决跨域的几种方案:

1、CORS(Cross-Origin Resource Sharing)

  • 使用 @CrossOrigin 注解或全局配置来启用 CORS,允许指定的域名进行跨域访问。

1.1、在目标方法上或者类上添加 @CrossOrigin 注解

@GetMapping("/list")
@CrossOrigin(origins = "http://example.com")
public List<String> list(){
    List<String> list = Arrays.asList("Java","C++","Go");
    return list;
}

1.2、全局配置跨域(实现 WebMvcConfigurer 接口,重写 addCorsMappings 方法)

@Configuration //配置类
@Slf4j //日志记录器(Logger)
public class WebMvcConfig implements WebMvcConfigurer {


    /**
     * 全局配置跨域,启用CORS
     * 允许跨域请求的配置,包括允许的来源、允许的请求头、允许的请求方法等
     * allowCredentials(false) 表示是否允许发送 Cookie 等认证信息。
     * allowedOrigins("*") 允许的来源域名,这里设置为通配符表示允许所有来源。
     * allowedHeaders("*") 允许的请求头。
     * allowedMethods("GET", "PUT", "POST", "DELETE") 允许的请求方法。
     * exposedHeaders("*") 暴露给前端的响应头。
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowCredentials(false)
                .allowedOrigins("*")
                .allowedHeaders("*")
                .allowedMethods("GET", "PUT", "POST", "DELETE")
                .exposedHeaders("*");
    }
}

2、代理服务器:

在后端创建一个代理接口,将跨域请求转发到目标服务器,再将响应返回给前端。这种方式需要自行维护代理服务器。

3、JSONP:

如果只是需要实现 GET 请求的跨域,可以使用 JSONP,但不适用于所有类型的请求。
自定义过滤器:

4、创建一个自定义过滤器

在请求处理前或响应返回前,修改请求或响应的头部信息,从而允许跨域访问。

5、Spring Security 配置:
如果项目中使用了 Spring Security,你可以在配置中添加跨域相关的配置,以支持跨域访问。