項目場景:
練習黑馬樂優商城項目遇到跨域問題,總結跨域問題描述:
瀏覽器控制台出現"No 'Access-Control-Allow-Origin"
什么是跨域

為什么會有跨域問題

解決跨域問題的方案
Jsonp

Nginx反向代理

CORS

CORS解決跨域
什么是CORS

CORS原理
瀏覽器會將ajax請求分為兩類,其處理方案略有差異:簡單請求、特殊請求
簡單請求



特殊請求



有沒有CORS區別

SpringMVC實現CORS


package com.leyou.gateway.config;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
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;
import java.util.Arrays;
/**
* @Date: Created in 9:40 2021/2/8
*/
@Configuration
@EnableAutoConfiguration
public class CORSFilter {
/**
* 注冊過濾器bean,設置跨域規則
*/
@Bean
public CorsFilter corsFilter() {
//配置CORS相關規則
CorsConfiguration corsConfiguration = new CorsConfiguration();
//允許哪些域名可以跨域訪問
corsConfiguration.setAllowedOrigins(Arrays.asList("http://manage.leyou.com","http://localhost:9001"));
//允許哪些提交方式可以訪問
corsConfiguration.setAllowedMethods(Arrays.asList("GET","PUT","DELETE","POST","OPTIONS"));
//允許哪些請求頭可以訪問
corsConfiguration.setAllowedHeaders(Arrays.asList("*"));
//是否允許操作cookie
corsConfiguration.setAllowCredentials(true);
//設置預檢請求有效期
corsConfiguration.setMaxAge(1800L);
//配置攔截請求路徑
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**",corsConfiguration);
CorsFilter corsFilter = new CorsFilter(source);
return corsFilter;
}
}
