1、跨域的原因:
由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求。同源策略規定,A網頁設置的Cookie、LocalStorage和IndexDB無法被同源以外的網頁讀取。
2、原因:
1)瀏覽器的同源策略(Same Origin Policy)限制了跨域請求。主要出于安全考慮,瀏覽器限制腳本只能讀取與之同源的資源。同源指的是協議、域名、端口都相同。跨域請求會因為違反同源策略而被阻止
2)Cookie和本地存儲也遵循同源策略。A域名下的頁面無法讀取B域名下的Cookie、localStorage等
3)跨域JavaScript請求會報錯。比如A頁面請求B頁面的JS文件,就會報錯
3、常見跨域請求
1)JSONP:通過script標簽加載JS文件來實現跨域通信
2)CORS:服務器端設置HTTP頭,允許指定的請求來源跨域訪問
3)postMessage:A域的window向B域的window發送消息,實現跨域通信
4、實現跨域的幾種方式
1)@crossOrigin 注解
@CrossOrigin(origins = "http://domain1.com")@RestControllerpublic class TestController {@GetMapping("/test")public String test() {return "hello";}}
2)過濾器CorsFilter
@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(true);config.addAllowedOrigin("http://domain1.com");config.addAllowedHeader("*");config.addAllowedMethod("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsFilter(source);}}
3).配置類WebMvcConfigurer
描述:可以在WebMvcConfigurer接口的addCorsMappings()方法中添加跨域配置
@Configurationpublic class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("http://domain1.com").allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH").allowedHeaders("*").allowCredentials(true);}}