http get方法不出现CORS跨域,post方法就出现CORS跨域问题

我们这里后端统一在 nginx 配置中加了允许所有方法跨域。

     # 允许 所有头部 所有域 所有方法
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Headers' '*';
    add_header 'Access-Control-Allow-Methods' '*';
    # OPTIONS 直接返回204
    if ($request_method = 'OPTIONS') {
    	return 204;
    }  

在实际中,get请求时,也不报cors问题了,以为万事大吉了。

但在一次 post 提交出错中,并返回json的错误信息(errMsg)时,并没有提示errMsg,操作直接卡住了,让用户感到系统假死了。

后来,以为是 nginx 配置问题,可能需要指定具体的提交方法,于是把上面的配置改成:

     

    add_header 'Access-Control-Allow-Origin' *;
    add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,  Access-Control-Expose-Headers, Token, Authorization';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, PUT, OPTIONS';
    # OPTIONS 直接返回204
    if ($request_method = 'OPTIONS') {
    	return 204;
    }  

试了一下,还是不行。浏览器控制台还是打印出 CORS跨域问题。

后来,把关注点放到 http statusCode 上面,异常处理后,http statusCode 已经被写死成 400 500这样的非 200 状态码,只要我返回非 200 状态码,就报跨域。不知道跟前端框架处理非200状态码有没有关系。

所以解决方案很简单:异常处理返回的 http statusCode 改成 200,再根据自身的业务码,判断成功与否就可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值