Spring Boot設定跨域訪問
1. 什麼是跨域HTTP請求
現代瀏覽器出於安全的考慮,使用 XMLHttpRequest物件發起 HTTP請求時必須遵守同源策略,否則就是跨域的HTTP請求,預設情況下是被禁止的。跨域HTTP請求是指A域上資源請求了B域上的資源,舉例而言,部署在A機器上Nginx上的js程式碼通過ajax請求了部署在B機器Tomcat上的RESTful介面。
IP(域名)不同、或者埠不同,都會造成跨域問題。為了解決跨域的問題,曾經出現過jsonp、代理檔案等方案,應用場景受限,維護成本高,直到HTML5帶來了CORS協議。
CORS是一個W3C標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源伺服器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。它通過伺服器增加一個特殊的Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支援CORS、並且判斷Origin通過的話,就會允許XMLHttpRequest發起跨域請求。
CROS常見header
-
Access-Control-Allow-Origin:http://somehost.com表示允許http://somehost.com發起跨域請求。
-
Access-Control-Max-Age:86400 表示在86400秒內不需要再發送預校驗請求。
-
Access-Control-Allow-Methods: GET,POST,PUT,DELETE 表示允許跨域請求的方法。
-
Access-Control-Allow-Headers: content-type 表示允許跨域請求包含content-type
2. 在spring boot工程中配置CORS跨域
這裡匹配了所有的URL,允許所有的外域發起跨域請求,允許外域發起請求任意HTTP Method,允許跨域請求包含任意的頭資訊。
@Configuration
public class CORSConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOrigins("*");
}
};
}
}
也可以參考:https://spring.io/guides/gs/rest-service-cors/
跨域資源共享 CORS 詳解:http://www.ruanyifeng.com/blog/2016/04/cors.html