【OSS跨域问题解决】为啥后端返回正常的图片地址,到前端就无法显示了?

372 阅读2分钟

🐭前言

早上起来拉开窗帘一看,又是风和日丽的一天,本想出门溜达溜达的(冬天的南方周末少有的暖阳啊~),但是打开手机看到了群里爆炸的消息,果断放弃了这个想法。

产品:为什么XXX的H5的用户照片显示不出来了啊,明明在管理后台已经进行配置了,而且支付宝小程序和微信小程序的用户照片都是正常的,销售和客户都来找我了

我:看着像是后端返回的url是失效的,后端如果未返回url我这边会显示默认照片的,后端老哥帮我看看日志呗

后端:我这边从日志看,后端返回的图片url是正常的

那么问题就来了,oss服务器返回的好好的url,为啥在前端渲染不出来了呢,我好好的周末啊

🐭问题排查

难道是前端显示代码的兼容性问题(因为我们的项目是跨平台uniapp项目)?带着这个疑问,我去排查了前端代码,并在运行在浏览器上查看,结果发现了控制台里的跨域报错!

Refused to load the image "https://XXX-test.oss-cn-shanghai.aliyuncs.com/xxxxxxxxx' because it violates the following Content SecurityPolicy directive: "default-src 'self'  cdn.dcloud.net.comcdn.dcloud.net.cn cdn.xxx.cn at.alicdn.com cdn.xxx.com 'unsafe-inline'unsafe-eval' blob: data:", Note that "img-src' was not explicitly set, sodefault-src" is used as a fallback.

既然问题已经暴露出来了,接下来解决就简单多了。当天我联系到了运维,让他帮忙排查了下线上uniapp项目在各个H5的平台的nginx配置,无独有偶,发现另一个H5平台的nginx配置也同样缺失了对oss图片服务器以及dcloud的cdn服务器的白名单配置。

🐭解决方案

服务器nginx配置,对受限制的跨域资源所在的域名加白处理