跨域是什么?浏览器不能执行其他网站的脚本,由浏览器的同源策略造成的,是浏览器对js施加的去安全限制。
同源策略是什么?协议、域名、端口,其中一个不一样都会产生跨域。
跨域流程是什么?1.预检请求,OPTIONS
2.响应允许跨域
3.发送真实请求
4.响应数据
跨域的根本原因是目标网站和发送请求的网站不在同一个域。
解决跨域:有个nginx服务器,将前端项目部署在nginx中,不同的网关也让nginx代理过来。
要访问前端项目就不访问前端地址了,直接访问nginx,要是静态资源,默认代理给前端项目,要是动态请求(路径包含api),还是先发给nginx,一看有api,转给网关,也就是反向代理给我们的网关,再转到其他服务
(1)使用nginx部署为同一域.()
(1.1)静态请求直接访问前端,动态请求转给(反向代理)getway(网关),网关再转到其他服务.
(2)配置当次请求允许跨域(在网关里统一配置跨域)
(2.1)代码如下:
@Configuration
public class GulimallCorsConfiguration {
public CorsWebFilter corsWebFilter(){
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration();
//1、配置跨域
corsConfiguration.addAllowedHeader(““); //允许访问的头信息,表示全部
corsConfiguration.addAllowedMethod(““); //允许提交请求的方法,表示全部允许
corsConfiguration.addAllowedOrigin(““); //允许向该服务器提交请求的URI,表示全部允许
corsConfiguration.setAllowCredentials(true);// 允许cookies跨域
source.registerCorsConfiguration(“/**”,corsConfiguration);
return new CorsWebFilter(source); }
}
