问题:
跨域问题:
同源策略
由于浏览器的同源策略,即属于不同域的页面之间不能相互访问各自的页面内容。
简单来说就是同协议,同域名,同端口
URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名不同文件 允许
http://www.a.com:8080/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://43.138.105.221/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同耳机域名(同上) 不允许 (cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
解决方法:
大体思路:
1. 当浏览器访问非同源服务器时,先做一次OPTIONS预检。问一下是否允许访问。
2. 服务器返回响应,回应是否允许访问。
3. 浏览器如果得到肯定的答复,才发送真实的请求数据。
4. 服务器正常返回数据
详情请看以下:
具体实现:
@Configuration
public class MallCorsConfiguration {
@Bean
public CorsWebFilter corsWebFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration configuration = new CorsConfiguration();
//配置跨域的信息
configuration.addAllowedHeader("*");
configuration.addAllowedMethod("*");
configuration.addAllowedOrigin("*");
source.registerCorsConfiguration("/**",configuration);
return new CorsWebFilter(source);
}
}