参考文档:https://blog.csdn.net/lyz86299355/article/details/81507787

小程序上的图片突然间就都显示不出来了,用开发工具打开看见报错提示:

Failed to load image <URL>

the server responded with a status of 403

你把图片连接复制到浏览器上又能正常显示

上网查了一圈说是防盗链的问题,

盗链的概念

盗链是指在自己的网站上展示一些并不在自己服务器上的一些内容, 一般被盗链的都是图片、 音乐、视频等资源。通过盗链的手段可以减轻自己服务器的负担

防盗链的原理

当你在自己网页上请求图片时图片的Request Headers中会带上一个来源参数Referer:

如果图片服务器的防盗链配置中没有加上你的网站域名,就会报错,我们可以把它理解为请求来源白名单

我的图片服务器用的是nginx, nginx.conf中的防盗链配置如下:

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
    valid_referers none blocked mywebsite.cn *.mywebsite.cn;
    if ($invalid_referer) {
        return 403;  // 直接返回403
        # rewrite ^/ http://www.mywebsite.cn/403.jpg; //返回指定提示图片
    }
  }

 小程序上图片的Referer参数如下

 如上我的防盗链配置 valid_referers 后没有添加 小程序的 Referer

就会直接返回403报错,

解决方法:

在nginx.conf中把小程序的referer: servicewechat.com加到valid_referers后即可

location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
    valid_referers none blocked mywebsite.cn *.mywebsite.cn servicewechat.com;
    if ($invalid_referer) {
        return 403;  // 直接返回403
        # rewrite ^/ http://www.mywebsite.cn/403.jpg; //返回指定提示图片
    }
  }

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐