使用ajax請求后臺時(shí)前端控制臺報(bào)錯(cuò):Failed to load https://example.com/: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘https://anfo.pl' is therefore not allowed access. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
| 跨域原因說明 | 示例 |
|---|---|
| 域名不同 | www.jd.com 與 www.taobao.com |
| 域名相同,端口不同 | www.jd.com:8080 與 www.jd.com:8081 |
| 二級域名不同 | item.jd.com 與 miaosha.jd.com |
CORS跨域問題的兩種解決方式
1.nginx反向代理
思路是:利用nginx反向代理把跨域?yàn)椴豢缬颍С指鞣N請求方式
缺點(diǎn):需要在nginx進(jìn)行額外配置,語義不清晰
2.后臺處理,與SpringBoot啟動類同級目錄下新建一個(gè)配置類
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 你需要跨域的地址,* 表示對所有的地址都可以訪問
corsConfiguration.addAllowedOrigin("*");
// 跨域的請求頭
corsConfiguration.addAllowedHeader("*");
// 跨域的請求方法
corsConfiguration.addAllowedMethod("*");
// 可以攜帶 cookie,可以 在跨域請求的時(shí)候獲取同一個(gè) session
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 配置 可以訪問的地址
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}