CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)。 它容許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。html
response響應頭:跨域
響應頭字段名稱 | 做用 |
---|---|
Access-Control-Allow-Origin | 容許訪問的客戶端的域名 |
Access-Control-Allow-Credentials | 是否容許請求帶有驗證信息,若要獲取客戶端域下的cookie時,須要將其設置爲true。 |
Access-Control-Allow-Headers | 容許服務端訪問的客戶端請求頭 |
Access-Control-Allow-Methods | 容許訪問的HTTP請求方法 |
Access-Control-Max-Age | 用來指定預檢請求的有效期(秒),在有效期內不在發送預檢請求直接請求。 |
Cors詳細介紹請看阮一峯的跨域資源共享 CORS 詳解瀏覽器
簡單粗暴,直接寫個filter攔截全部請求在response頭裏加上面的字段.服務器
繼承WebMvcConfigurerAdapter重寫addCorsMappingscookie
public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedHeaders("*") .allowedMethods("*") .allowedOrigins("*"); } }
@Bean public FilterRegistrationBean corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.setAllowCredentials(true); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0); return bean; }
@CrossOrigin( origins = "*", allowCredentials = "true", allowedHeaders = "*", methods = RequestMethod.GET, maxAge = 3600 )
因爲我使用了Spring Security,即便配置了響應頭字段,仍是不能訪問,通過反覆測試,最後想到可能由於我用了Spring Security,而Spring Security攔截了個人請求,致使配置不成功.app
HttpSecurity#authorizeRequests().antMatchers(HttpMethod.OPTIONS).permitAll()