報錯問題如下
Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
從http://localhost:8601訪問http://localhost:63110/system/dictionary/all被CORS policy阻止,因為沒有Access-Control-Allow-Origin 頭信息。CORS全稱是 cross origin resource share 表示跨域資源共享。
出這個提示的原因是基於瀏覽器的同源策略,去判斷是否跨域請求,同源策略是瀏覽器的一種安全機制,從一個地址請求另一個地址,如果協議、主機、端口三者全部一致則不屬於跨域,否則有一個不一致就是跨域請求。
比如:
從http://localhost:8601 到 http://localhost:8602 由於端口不同,是跨域。
從http://192.168.101.10:8601 到 http://192.168.101.11:8601 由於主機不同,是跨域。
從http://192.168.101.10:8601 到 https://192.168.101.10:8601 由於協議不同,是跨域。
註意:服務器之間不存在跨域請求。
瀏覽器判斷是跨域請求會在請求頭上添加origin,表示這個請求來源哪裏。
比如:
Origin: http://localhost:8601
Access-Control-Allow-Origin:*
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* @description: 跨域過慮器
* @author: Ian Wang
* @date: 2023/10/31 上午 10:38
* @version: 1.0
*/
@Configuration
public class GlobalCorsConfig {
/**
* 允許跨域調用的過濾器
*/
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
//允許白名單域名進行跨域調用
config.addAllowedOrigin("*");
//允許跨越發送cookie
config.setAllowCredentials(true);
//放行全部原始頭信息
config.addAllowedHeader("*");
//允許所有請求方法跨域調用
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
沒有留言:
張貼留言