跨域配置
...大约 1 分钟跨域脚手架
什么是跨域:协议(Http,Https)、主机、端口三者有一个不一致就是跨域请求
解决跨域的方式:
服务端在响应头添加 Access-Control-Allow-Origin:*
通过nginx代理跨域
server { listen 80; server_name yourdomain.com; location /api/ { # 允许所有源跨域访问 add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization, X-Requested-With'; add_header 'Access-Control-Allow-Credentials' 'true'; # 如果使用Nginx作为反向代理,请添加相应的proxy_pass配置 # proxy_pass http://backend-server:port/api/; # 其他配置... } }
Java端解决方式:
方式一:
@Configuration
public class GlobalCorsConfig {
/**
* 允许跨域调用的过滤器
*/
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
// 允许白名单域名进行跨域调用
config.addAllowedOrigin("*");
// 允许跨越发送cookie
config.setAllowCredentials(true);
// 放行全部原始头信息
config.addAllowedHeader("*");
// 允许所有请求方法跨域调用
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 允许所有路径
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}
方式二:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 为所有路径配置跨域
registry.addMapping("/**")
.allowedOrigins("*") // 允许所有源
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的 HTTP 方法
.allowedHeaders("*") // 允许所有请求头
.allowCredentials(true) // 允许携带凭证
.maxAge(3600); // 预检请求缓存时间
}
}