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)!