问题描述
今天帮刚来公司不久的后台兄弟,部署测试环境;
刚开始,是正常的,后来前端就一直报跨域异常;
很奇怪,因为我在配置的时候,是已经把跨域配置了的,但是还是出乎意料的出现了跨域;
最后:发现:是项目代码没有启动!!!
问题分析:
因为公司使用的服务器都是自己的物理服务器;
而且测试服务器中只有一台测试服务器,做了外网映射;也就是内网穿透;
这样可以方便员工在家里也可以加班…嗯…
我们称做了内网穿透的这台测试服务器为:服务器A
称未做内网穿透的其他测试服务器中的其中一台为:服务器B
不难理解:
我们在服务器A做nginx 配置转发,就能将其他服务的请求转发到各自的服务器中;
现在,我在服务器B上,新建了一个目录,标记为其项目的目录,并让其将自己的代码部署在服务器B,然后在服务器A里配置nginx转发,就可以在外网环境通过服务器A的转发访问到服务器B;
但是问题来了:
在请求到达服务器A时:
因为服务器B的服务没开,所以在转发到服务器B时没找到,所以就报了错误,但是为什么这个错误就显示是跨域,就让我往跨域的方向找了半天,最后发现:是项目代码没有启动!!!
顺便总结一下跨域问题的常用的解决方案:
1:nginx配置cors解决
这也是我之前一直使用的解决方案:
需要在nginx配置文件中配置全局跨域即可:
server {
…
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods ‘GET,POST’;
add_header Access-Control-Allow-Headers ‘DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization’;
}
2:java后台springBoot配置提供配置
新建配置类,并重写跨域处理接口:
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
//重写父类提供的跨域请求处理的接口
public void addCorsMappings(CorsRegistry registry) {
//添加映射路径
registry.addMapping("/**")
//放行哪些原始域
.allowedOrigins("*")
//是否发送Cookie信息
.allowCredentials(true)
//放行哪些原始域(请求方式)
.allowedMethods("GET", "POST")
//放行哪些原始域(头部信息)
.allowedHeaders("*");
}
};
}
}
最后,服务记得启动!