前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >疑难杂症:axios跨域 , 有些可以访问成功,有些访问不成功

疑难杂症:axios跨域 , 有些可以访问成功,有些访问不成功

作者头像
用户9914333
发布2022-07-21 20:11:42
1.3K0
发布2022-07-21 20:11:42
举报
文章被收录于专栏:bug收集

01

错误信息

调用接口报错误:

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.

02

问题分析

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

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

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

03

原因

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

04

解决方案(后端处理)

后端,处理跨域时,需要针对origin为null的情况,单独处理一下

代码如下:

代码语言:javascript
复制
String origin = httpServletRequest.getHeader("Origin");
if (origin == null) {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", "*");
} else {
     httpServletResponse.addHeader("Access-Control-Allow-Origin", origin);
}

注:

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

代码语言:javascript
复制
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);
}

05

总结

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

< END >

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档