疑难杂症:postman测试通过,但axios还是报跨域问题

问题


调用接口报错误:

Access to XMLHttpRequest at ‘http://xxxx/api/Order/OrderList’ from origin ‘http://xxx.xx.xx.xx:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.


分析


看到上面的问题,第一反应就是跨域问题。处理方法,要么后台处理跨域,要么使用代理跨域,so eary。

方法一: 后台进行跨域处理,处理后,postman测试没有问题,有些电脑访问没有问题,但是个别电脑访问,就会出现上面的跨域问题提示,到底是什么原因呢?


方法二:使用代理跨域没有问题.


原因


最后,终于找到了原因,后台处理跨域时,Access-Control-Allow-Origin设置为号,而号,在处理origin为null的情况下,就有问题,没有生效。


解决方案(后端处理)


针对origin为null的情况,单独处理一下


代码如下:

String origin = httpServletRequest.getHeader("Origin");
if (origin == null) {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
} else {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", origin);
}

注:

在发起post请求时,代码不止发一次,会先发一个options请求,所以,注意不要重复添加,否则也不能解决问题。

String origin = httpServletRequest.getHeader("Origin");
if (origin == null) {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
} else if (httpServletRequest.getMethod().equals("OPTIONS")) {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", origin);
}

总结


虽说,这问题,应该有后端来解决,但是由于这个问题,只是特定情况下才会出现的,所以容易扯不清,so , 我们前端,也要记住这个问题,如何出现这个问题,也可以提醒后端,可能是这个原因。


作者:doubleyong

公众号:bug收集

博客:bugshouji.com (专门解决与收集bug的网站)

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug收集

谢谢老板的鼓励,我会继续加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值