自学内容网 自学内容网

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,再根据自身的业务码,判断成功与否就可。


原文地址:https://blog.csdn.net/u011383596/article/details/142785458

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!