SpringBoot序列之CORS解决跨域问题
前言
作为后端开发者,跨域问题并不是一个新鲜的事啦。
何为跨域? 浏览器的同源策略,同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。当对于不同源的文档或者脚本,浏览器会认为这是一个潜在恶意的文件,所以对其进行了拦截处理。
何为跨域? 简单来说,只有当协议,域名,端口号相同的时候才算是同一个域名,否则,均认为需要做跨域处理。下面看一张图(这张图已经说明的很详细啦)
跨域的解决方法
通常情况下,对于跨域有好几种解决方法
- jsonp方式
- CORS方式
- 服务器端配置方式(nginx配置实现)
CORS方式解决跨域问题
科普时间:CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 ajax 只能同源使用的限制。CORS 需要浏览器和服务器同时支持才可以生效,对于开发者来说,CORS 通信与同源的 ajax 通信没有差别,代码完全一样。浏览器一旦发现 ajax 请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
SpringBoot中配置CORS跨域代码实现,有好几种方式啦
- 重写WebMvcConfigurer(全局配置跨域)
- 返回新CorsFilter(全局配置跨域)
- 使用@CrossOrigin注解(局部配置跨域)
- 设置Header头方式(局部配置跨域)
重写WebMvcConfigurer解决跨域问题
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer CORSConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 放行哪些原始域
.allowedOrigins("*") // 设置访问源地址
.allowedMethods("*") // 设置访问源请求方法 *代表全部 可以指定("GET","POST", "PUT", "DELETE")
.allowedHeaders("*") // 设置访问源请求头
.allowCredentials(true) //设置是否允许跨域传cookie
.maxAge(3600); //设置缓存时间,减少重复响应
};
}
}
本文参考:跨域,你需要知道的全在这里