http 请求成功但仍然提示跨域

本人小白。。。网上也看了不少http资料,但只看清楚了他写了什么字,重来没懂他是什么意思。。。。

问题是这样的:目前是通过后端设置Access-Control-Allow-Origin: *来解决跨域的(后端我不懂)!前端一律通过ajax来请求接口,今天调个下载文件接口发现浏览器提示“No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9000' is therefore not allowed access”,下面是请求截图:

clipboard.png

请求成功了,数据也拿到了,但为何还是提示跨域呢???并且其他接口都没问题,唯独这个。。。。
然后我对比了下其他接口的响应头,其他接口响应头都有Access-Control-Allow-xxxx的相关信息 包括Access-Control-Allow-Origin:*;而这个接口响应头啥都没有!如果是没请求成功 数据也没拿到,我可能还以为后端没设置允许我这个域访问,但是现在。。。。。简直搞不清楚状况啊。。天书啊。。。这是,这和农田里随便找个农民伯伯给他讲解航空母舰的制造一样懵逼啊。。。。

我的理解是,这个跨域还是浏览器端拦截,虽然你后端返回数据,但是浏览器同源策略(由于没有Access-Control-Allow-Origin:*)还是认为跨域,所以也不会触发ajax的success,那这样的话问题又来了,如果后端没设置Access-xxx那我应该请求不了的。更不可能拿到数据,那如果设置了。。。Access-xxx去哪了?

本人就初中学历,希望前辈们能通俗易懂的讲解下整问题的来龙去脉,感激不尽!

阅读 9.3k
5 个回答

我也遇到类似的现象,问题表现为,当你请求一个腾讯云上的资源的时候,浏览器network里面可以看到数据都完整的返回了,然而浏览器抛出了跨域问题,我的程序也因为请求异常而终止了。
之前的做法是让后端加上允许跨域,问题是解决了,但是这个现象自己也理解不了,当时没有深究。
个人感觉我当时使用的那个情况可能跟资源经由cdn的关系,但具体关系自己也不明了。

1.首先判断是否跨域是浏览器端的行为,也就是说即使拿到数据了,响应头不对,浏览器认为跨域了也会终止后续操作
2.你这个请求没有贴地址,后端对这个请求的响应少了个请求头

但只看清楚了他写了什么字,重来没懂他是什么意思
这句话很有意思~
推荐问题
宣传栏