为什么会有跨域问题
同源策略(Same-Origin Policy):是一个安全策略。认定 (协议、域名、端口)全部相同,认定是同源。非同源会被浏览器所拦截,不允许相互通信。
http://127.0.0.1:8080 与 http://localhost:8080 因为域名不同,所以不是同源,会报跨域问题
http://127.0.0.1:8080 与 https://127.0.0.1:8080 因为协议不同,所以不是同源,会报跨域问题
http://127.0.0.1:8080 与 http://127.0.0.1:8081 因为端口不同,所以不是同源,会报跨域问题
只有协议(http与http一致)、域名与域名一致、端口与端口一致才认定为同源,就不会有跨域问题。
比如 http://zanglikun.com 与 http://zanglikun.com/1/2/3,就不会跨域
方式一 Java代码
启动类加上 @CrossOrigin 也可单独加在方法上
// 允许跨域
@CrossOrigin
配置类 CorsConfig 继承WebMvcConfigurerAdapter 重写addCorsMappings 方法
/**
* @Author: 臧立昆
* @Email: 740969606@qq.com
* @Date: 2020/8/3
* @Time: 13:47
*/
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
// 为指定的路径模式启用跨域请求处理
.addMapping("/**")
// 允许源来自*代表任何地方 Springboot 2.4 之前用.allowedOrigins("*")
.allowedOriginPatterns("*")
// 是否允许传递cookie,默认不允许
.allowCredentials(true)
// 配置允许的方法 源码注释说:GET、HEAD、POST 默认是允许的
.allowedMethods("GET", "POST", "DELETE", "PUT", "HEAD")
//.allowedMethods("GET", "POST", "DELETE", "PUT", "HEAD", "OPTIONS", "TRACE","CONNECT")
// 配置客户端缓存时间(以秒为单位)默认1800秒也就是30分钟
.maxAge(3600);
}
}
方式二 Nginx 反向代理
Nginx 正常的反向代理 proxy_pass 可以解决跨域。因为跨域是浏览器人为的,但是Nginx是服务器,他发送的请求把结果转发而已!
方式三 (没实际用过,用的时候 建议现百度当前项目boot版本)
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 org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**",config);
return new CorsFilter(source);
}
}
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤