新浪图床限制外链的解决方法

April 30, 2020 · IT技术向 · 403次阅读

新浪图床,或者说微博图床,应该是很有名的了。
全球 CDN 加持、不占用站点存储空间、免费还高质量的东西,白嫖起来当然是很舒服的
所以有一些站点就是依赖于新浪图床的。

虽然我的博客并没有完全依赖于新浪图床,但还是有部分内容用到了,也就是表情包。
不得不说,文内引用表情包对于提升文章的阅读效果是有帮助的。
在写博文的时候,我都是通过发表情网来检索表情包,然后将表情包的图片链接插入博文的。
而该网站,恰恰用到了新浪图床来存储表情包。
1发表情网用的是新浪图床.png

本来吧,也没什么特别的,直接外链引用就行了。
可是新浪图床在大概一年前的时候,对图片服务器的域名做了防盗链处理。

这样一来,我站内引用的表情包就无法显示了(只有一个图片损坏的小图标)。

解决方案

那么针对这个问题,我是怎么解决的呢?

当时我发现,引用的图片并非全部无法显示,https协议的图片链接会显示不出来,而http协议则完全正常。
大致可以判断,新浪只针对https协议设置了防盗链处理(大概是觉得自己全站https所以不必在乎http?)。

所以处理方式就很简单了:直接把图片链接统统换成http协议,随后引用的图片全部恢复显示。

不过这样会有个小问题。
针对https协议的网站,引用http资源时会被视为是“混合内容”,这样的状态下,网站不会被判断为安全。最直观的一点就是浏览器的地址栏上会有不同的提示:
2混合内容与否导致的安全提示不同.png

关于“混合内容”,具体可以查阅 https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content?hl=zh-cn

当然,如果不是强迫症患者,可以无视。
如果非要解决的话,请看下面的终极解决方案。

终极解决方案

虽说自己有点强迫症,不过对于“混合内容”这个提示,我还是挺佛系的。

直到最近,有朋友提及此事,问题被再次纳入考虑当中——能解决还是尽量解决了好。

新浪图床域名的结构是:节点名+序号+sinaimg.cn,其中节点名主要有wwwswx这三种。举个例子就是ww1.sinaimg.cn
这些节点都接入了 CDN,节点名似乎只是用来区分 CDN 的提供商。所以将节点名进行改动,也是大概率能够访问到同一张图片的。
3新浪图床节点名通用.png

很巧的是,后来新浪又增加了一个tva的节点名,并且没有设置防盗链
尽管发表情网引用的依然是来自wwwswx这三个节点的图片,但通过只将节点名修改为tva,你就会发现,图片神奇地打开了,也可以通过https协议正常引用在网站当中。

所以,现在开始,我的博客就是标准的全站https了,浏览器也不再提示“部分安全”。

一些后话

当然,要想解决这个问题,不只是有上面两种方案。

通过修改图片referrer参数为空,或者改为iframe内嵌图片的形式,都是能够予以解决的,但是这样的方案并不能很便捷地解决问题,甚至会带来额外的麻烦。

对于我自己来说,甚至可以将用到的表情包和文内其他正式图片一并储存在自建的静态文件域名static.kiwiape.cn上,但是这样需要多出很多繁琐的下载、上传过程,大量无意义的表情包也给自己的对象存储造成了一定的资源浪费和迁移困难。

哪有什么选择恐惧症还不是因为穷

参考资料

  1. 新浪相册图床限制外链,总结的一些解决方案! https://51.ruyo.net/12432.html

广告栏(测试)

来杯咖啡吧!

图床外链

最后编辑于8天前

添加新评论

  1. 2020-07-19 00:33

    白嫖图床总觉得有点担心
    我用的是github+jsdlivr,应该会比新浪安全一些……
    不过还是有顾虑,所以我图片都是图床一份服务器也存一份

    回复
    1. 2020-07-19 02:54

      看是什么用途吧,像我博客重要内容也是放自己对象存储的,图床只是表情包和评论区调用,问题不大。
      以新浪目前的体量,也实在不敢封死了,不然全网玩完一大片。
      Github的话我记得仓库容量有限制吧,做图床也不太习惯。

      回复
  2. 2020-07-07 18:24

    上防盗链又上不全,新浪到底在乎不在乎被盗链......

    回复
    1. 2020-07-07 18:39

      可能这东西就和打击盗版是一样的,不能一棍子打死,估计是有相关的考虑吧……

      回复