1. 程式人生 > 實用技巧 >Spring Boot設定跨域訪問

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