后台异常引起前端提示跨域出错

  1. 场景:
    系统A:nodejs+vue.js
    系统B:spring boot
    通过系统A前端调用系统B,一直提示:No 'Access-Control-Allow-Origin' header is present on the requested resource

  2. 定位问题:
    js跨域问题,很好定位

  3. 尝试解决:
    网上解决方法很多,如下:
    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;
}
  1. 原因:
    前端请求参数出错了,导致后台取参异常,然后返回null,导致header失效,跨域失败...
    因为这段代码很久没人维护,很难发现,一直提示前端跨域失败,其实是别的原因。
原文地址:https://www.cnblogs.com/bincoding/p/10174989.html