美文网首页
遇到“此图片来自微信公众平台”?教你解决

遇到“此图片来自微信公众平台”?教你解决

作者: 候鸟与暖风 | 来源:发表于2023-11-05 10:51 被阅读0次

    公众号文章的图片在第三方网站展示,如下图所示:


    WechatIMG334.jpg

    原因:

    这是因为微信公众平台,为了保护原创内容的版权和安全,对图片做了相应的安全识别,也就是对图片采用了防盗链处理。微信对外提供了AP接口,我们可以通过授权的方式获取到自己公众号里面的文章,但是微信的图片默认是不允许外部调用的。因此当我在第三方平台展示时就会出现“此图片来自微信公众平台未经允许不可引用”这个问题。

    原理:

    浏览器根据图片的链接去请求图片所在的服务器,以此来获取图片的内容。在http协议的请求头中,有个Referer字段,这个Referer字段就是请求图片的网页地址,这个字段是可选的。客服端发送请求的时候,可以自主决定是否加上该字段,而对于浏览器来说,一般都会加上这个字段,因此,浏览器会自动在请求头中带上这个包行URL的网页地址。当微信服务器发现图片请求中携带的Referer不是来自微信的域名时,就会直接返回一张“此图片来自微信公众平台...”的图片。这样做可以防止其他网站使用自家的图片从而浪费自家的宽带,从而降低自身资源的消耗,而在Web开发领域,这被称为“防盗链”。


    f0988277-f3dd-4bde-9572-ea8856197a2e.png

    方法1:
    将公众号文章图片上传到服务器,图片链接更换为我们自己服务器的链接

    方法2:
    Referer字段是可选的,那么不让浏览器传这个字段给微信图片服务器即可

    <meta name="referer" content="no-referrer">
    

    需要注意问题:
    <meta name="referer" content="no-referrer>会导致百度统计失效原因:因为百度统计的“hm.js”文件服务只有在检测到请求中Referrer以后才会返回正确的js资源,否则会响应空的内容。所以如果项目中有百度统计,则应该使用如下所示动态添加meta的方法

    解决办法:
    动态添加meta。等百度统计的js资源请求成功以后,再使用js将meta添加到head中。

        <script>
            (function(){
                let meta = document.createElement('meta');
                meta.content = 'no-referrer';
                meta.name = 'referrer';
                document.getElementsByTagName('head')[0].appendChild(meta);
                console.log(document.getElementsByTagName('head'))
            })()
        </script>
    

    相关文章

      网友评论

          本文标题:遇到“此图片来自微信公众平台”?教你解决

          本文链接:https://www.haomeiwen.com/subject/jppzidtx.html