1.跨域:
指的是浏览器不能执行其它网站的脚本,他是由浏览器的同源策略引起的,是浏览器对javascript施加的安全限制
2.同源策略:
指的是协议、域名、端口都要相同,其中有一个不同都会报错
浏览器报错:
3.跨域流程:
4.解决方案:
Java中的配置:
1)可以在请求资源的控制器上加@CrossOrigin注解
2)config配置:
@Configuration
public class CorsConfig {
@Bean
public CorsWebFilter corsWebFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 1、配置跨域
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOriginPattern("*");
corsConfiguration.setAllowCredentials(true);// 否则跨域请求会丢失cookie信息
source.registerCorsConfiguration("/**", corsConfiguration);
return new CorsWebFilter(source);
}
}
我这里是springboot2.6.6版本,低版本把第三个换成corsConfiguration.addAllowedOrigin("*");
解决跨域三:如果前端使用了Vue-cli 创建的项目,可以直接利用 Node.js 代理服务器,通过修改vue proxyTable接口实现跨域请求
proxyTable: {
'/api': { //代理地址
target: 'http://10.1.0.34:8000/', //需要代理的地址
changeOrigin: true, //是否跨域
secure: false,
pathRewrite: {
'^/api': '/' //本身的接口地址没有 '/api' 这种通用前缀,所以要rewrite,如果本身有则去掉
}
}
}