uniapp H5 出现 has been blocked by CORS policy 跨域问题的解决方法

最近在开发uniapp的H5网站的时候遇到一个跨域问题,百度了很多方案都没效果,最后还是利用后端将远程数据拉到自己的服务器才解决。现在将过程简单记录一下。

问题复现:

Access to XMLHttpRequest at 'https://www.a.com/api/' from origin 'https://www.b.com/request.php' has been blocked by CORS policy.

这里假设我要获取的数据存放于服务器 www.a.com ,这个域名和服务器是第三方,不归我,我也没有控制权,只能远程读取数据。而域名 www.b.com 和服务器则属于我,我有控制权。

在开发APP和小程序的时候,是不会出现上述这个跨域问题的。该问题只有在开发H5的时候才会出现。Dcloud官方给出的方案是在HBuilder X内置浏览器中调试可以避免跨域问题,但是在将代码部署到服务器上,这个解决方案就没有用了,我总不能让用户都使用HBuilder X吧。有人说在manifest.json文件中加代理可以解决,我试过了,可能是没弄清楚这个代理的原理,所以没有成功。最后我是用一个php后端文件解决的。方法如下:

第一步,在自己服务器上新增一个php文件中,用file_get_contents方法将第三方api数据拉到本地。

第二步,在前端,uni.request的时候,不是直接get第三方服务器的API地址,改为get自己服务器上的这个php文件。

这样一来,前、后端都是部署在自己服务器上,就不会再产生跨域问题了。

补充说一句:用php通过抖音api获取无水印播放地址也会遇到这个跨域的问题(最近才出现的),根据上面的办法操作即可破解。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注