1.什么是跨域问题?
在浏览器里,为了安全着想,一般只会允许同源之间交互,同源:同一协议,同一端口号,同一域名。跨域指的就是非同源之间的访问。
如果你是在本地搭建的前后端分离的项目,那么就会存在这个问题。
2.跨域有哪些解决方式
2.1 浏览器
既然同源是因为浏览器带来的,其实只要把浏览器的安全策略关闭,那么就可以解决了,当然,这是最基本的问题
https://www.cnblogs.com/zhongxia/p/5416024.html这个博客写的很全
2.2 前端
前端如果你用的是Vue,那么可以通过设置代理的形式;如果你用的不是Vue,可以通过使用Nginx
在Vue的根目录下,找到Vue.config.js,输入以下代码:
module.exports = { //相当于webpack-dev-server, 对本地服务器进行配置 devSever : { proxy: { "/api" : { target: " http://localhost:3000 ", //需要跨域的目标url ,我这里是自己本地起的一个服务端口 changeOrigin: true, // 将基于名称的虚拟托管网站的选项,如果不配置,请求会报404 ws: true, pathRewrite: { " ^/api " : "" //若请求的路径在目标url下但不在/api 下,则将其转换成空 } } } } }
3.3 后端
后端我开发的时候用的是springboot
3.3.1 如果要细分到每个方法,推荐使用注解@Crossorigin
@CrossOrigin有几个主要的参数,
originPatterns:源模板,默认值是*
allowedHeaders:允许的请求头,默认值是*
1 @CrossOrigin(originPatterns = {"*"}, allowedHeaders = "*") 2 @RestController 3 public class paperController { 4 @Value("${file.upload.abspath}") 5 private String abspath; 6 @Value("${file.upload.mdImageDir}")
3.3.2 实现一个配置类,需要继承于WebMvcConfigurer。@Configuration表示这是一个配置类,交给spring管理。然后需要重写父方法
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedHeaders("*")
.allowedMethods("*")
.allowedOriginPatterns("**")
.allowCredentials(true);
}
}
浙公网安备 33010602011771号