要解决浏览器的跨域问题,则需要了解什么是跨域。在了解跨域概念的基础上,才能从根本寻找解决方案,本文将从跨域的原因以及在springboot中如何解决跨域进行展开。
1.什么是跨域
由于浏览器具有同源策略,同源策略是一个重要的安全策略,它用于限制一个源的文档或者其加载的脚本如何与另一个源的资源进行交互。它能够帮助阻隔恶意的文档,减少被攻击的可能。
同源标准:协议+域名+端口号完全一致
以下列举了几种不同的跨域形式:
源网站 | 目标网站 | 原因 |
---|---|---|
http://www.nibudong.com | http://www.diamond.com | 域名不同 |
http://www.nibudong.com | https://www.nibudong.com | 协议不同 |
http://172.17.65.137:80 | http://172.17.65.137:8081 | 端口号不同 |
http://www.nibudong.com | http://nibudong.com | 主域相同,子域不同 |
http://www.nibudong.com | http://172.17.65.138:80 | 域名和其对应相同的IP |
上述几种情形都会出现跨域问题。
2.跨域问题解决
利用springboot编写后端代码时,需要通过配置来允许跨域。具体配置文件如下:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @description: cors跨域配置
* @author: marin
* @time: 2020/5/14 16:06
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 允许跨域访问的路径
.allowedOrigins("*") // 允许跨域访问的源
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
.maxAge(168000) // 预检间隔时间
.allowedHeaders("*") // 允许头部设置
.allowCredentials(true); // 是否发送cookie
}
}
添加改配置后,则服务端默认允许跨域,以post、get、put、options、delete方式访问的请求都被允许。
3.小结
上述方案是基于CORS进行实现的,其实还可以用反向代理技术等解决,CORS是目前主流的解决跨域的方案,跨域问题在前端的解决方案也有不少,等有机会具体更新相关博文,新手上路,若有不足,多多指教。