1、什么是跨域
协议相同 http https 域名相同 www.onlineclass.net 端口相同 80 81
在浏览器访问的时候,以上三者任意一个不同,都是跨域;
浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域
2、解决跨域的方法
(1) Http响应头配置允许跨域
nginx层配置,在前端和后端之间加上一个反向代理服务器
Ngixnhttps://www.cnblogs.com/hawk-whu/p/6725699.html(2) 程序代码中处理
SpringBoot 通过拦截器配置,这种方式只适合小项目,在大的项目中还是用方法1;
实现方式:构建一个跨域的拦截器,在拦截器的pre方法配置httphead信息,配置完将所有接口都放行;
@Override // 拦截器配置
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//表示接受任意域名的请求,也可以指定域名
response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
//该字段可选,是个布尔值,表示是否可以携带cookie
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Headers", "*");
// option 就是跨域请求,需要判断
if(HttpMethod.OPTIONS.toString().equals(request.getMethod())){
return true;
}
return true;
}
// 进行跨域配置的拦截,所有路径都放行
registry.addInterceptor(corsInterceptor()).addPathPatterns("/**");