协议、域名、端口不全部相同
AJAX属于同源策略,用的AJAX,所以导致前端网页请求后端接口的时候提示跨域报错
解决方法
利用反向代理服务器,如nginx
服务端支持跨域
1.Spring使用@CrossOrigin注解来指定类或者方法支持跨域
2. 或者使用CorsRegistry这个bean来进行全局配置
这种做法如果不使用拦截器的话,不会出现问题。但是如果用了拦截器,可能会导致拦截器拦截以后,后面无法像response设置响应头。
解决方法: 将处理Cors的拦截器设置到第一个位置。
3.
使用CorsFilter设置全局跨域
自己实现了一个bean,通过继承CorsFilter和重写configurationSource方法,在方法中添加headers。
过滤器也需要设置优先级@Order(Ordered.HIGHEST_PRECEDENCE)
为什么过滤器可以而拦截器不行呢?
因为过滤器依赖于 Servlet 容器,基于函数回调,它可以对几乎所有请求进行过滤。而拦截器是依赖于 Web 框架(如Spring MVC框架),基于反射通过AOP的方式实现的。