跨域报错信息如下:
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,你可以在配置中添加跨域相关的配置,以支持跨域访问。