场景:
系统A:nodejs+vue.js
系统B:spring boot
通过系统A前端调用系统B,一直提示:No 'Access-Control-Allow-Origin' header is present on the requested resource定位问题:
js跨域问题,很好定位尝试解决:
网上解决方法很多,如下:
https://www.cnblogs.com/wangyongcun/p/7665687.html
后台controller如下:
try{
response.setHeader("Access-Control-Allow-Origin", "*");
String request = new String(HttpUtils.stream2Bytes(requestBody.getInputStream()),"UTF-8");
catch(Exception ex){
logger.error("参数错误",e);
return null;
}
同时前端代码如下:
this.$http.post({
url: server,
params: submitData,
successCallback: (rs) => {
var result = JSON.parse(message);
this.addChatMsg(result.data.msg, () => {
this.$refs.common_chat.goEnd();
});
}
});
结果一样,还是报错...
后面反复查看nginx, spring日志,发现一个小细节
catch(Exception ex){
logger.error("参数错误",e);
// 这里返回null, response.setHeader失效了
return null;
// 正确应返回如下
return response;
}
- 原因:
前端请求参数出错了,导致后台取参异常,然后返回null,导致header失效,跨域失败...
因为这段代码很久没人维护,很难发现,一直提示前端跨域失败,其实是别的原因。