侧边栏壁纸
博主头像
liker的博客

去码头整点薯条

  • 累计撰写 10 篇文章
  • 累计创建 9 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

解决Halo博客文章中gitee外链图片无法显示的问题

liker
2025-06-29 / 0 评论 / 0 点赞 / 37 阅读 / 0 字

前言概览

在使用 Halo 博客平台撰写 Markdown 文章的过程中,我遇到了一个令人困扰的问题:文章中的图片链接来自 Gitee 图床,但在 Halo 博客中却无法正常加载显示

1. 问题现象

具体表现如下:

  • 我使用的是 PicGo 配合 Typora,在本地写 Markdown 时上传图片至 Gitee 图床;

  • 在本地预览(Typora)中,图片正常显示;

  • 将 Markdown 文件直接上传到 CSDN 等平台时,图片也能显示;

  • 直接用浏览器打开 Gitee 图床链接,图片可以访问,无需登录

  • 但在 Halo 博客中发布文章后,图片全部加载失败,呈现空白。

2. 本质原因

经过一番搜索与排查,我发现这是由 Gitee 图床开启了防盗链机制 导致的。

简单来说,Gitee 只允许浏览器直接访问其图片链接,但禁止其他网站通过 <img> 标签引用其图片,以防止盗链滥用。

而 Halo 博客在展示文章时,会从其他源(如 CDN 或独立域名)加载页面内容,此时发送图片请求的 Referer 不是 Gitee 允许的来源,从而被阻止加载

2.1 防盗链是什么?

防盗链不是一根链条,正确的停顿应该是防、盗链——防止其他网站盗用我的链接。

我把图片上传到gitee的服务器,得到了图片的链接,然后拿着这个链接在第三方编辑器中使用,这就是在“盗用”——因为这张图片占用了gitee的服务器资源,却为第三方编辑器工作,gitee得不到好处,还得多花钱。

2.2 如何实现防盗链?

参考博客:使用gitee搭建图床,并解决防盗链问题_gitee上传图片,浏览器能访问吗-CSDN博客

要实现防盗链,就需要知道图片的请求是从哪里发出的。可以实现这一功能的有请求头中的origin和referer。origin只有在XHR请求中才会带上,所以图片资源只能借助referer。其实gitee也确实是这么做的。

通过判断请求的referer,如果请求来源不是本站就返回302,重定向到gitee的logo上,最后在第三方网站引用存在gitee的资源就全变成它的logo了。

可以在开发者工具中看到第三方网站请求gitee图片的流程:

img

3. 解决办法

3.1 针对Halo博客网站搭建

**在页面中加入如下 HTML 元标签,即可绕过 Gitee 的防盗链限制。**自己网站搭建都可以用这个方法,在打包好的index.html中加入如下代码。

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

步骤一:进入Halo控制台 -> 设置 -> 代码注入

image-20250629181839114

步骤二:在全局head和内容页head加入代码

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

步骤三:保存

image-20250629181922102

3.2 其他方法(未尝试,仅提供参考)

  1. 迁移图床,比如不使用gitee,迁移到其他云中,但是需要付费呀(悲)

  2. 使用CDN加速,个人觉得有点麻烦,但是也是一个需要掌握的技能。

总结

这是一个很常见但又容易忽略的问题:Gitee 图床图片防盗链机制。很多时候在本地或者某些博客平台能正常显示图片,但在 Halo 这样的独立博客中却失效了,本质就是缺少 referrer 控制。

参考博客

🔓 破解防盗链,前端必备技能

使用gitee搭建图床,并解决防盗链问题_gitee上传图片,浏览器能访问吗-CSDN博客

解决gitee图床防盗链问题 | 冰刻无痕

【Blog】通过全局代码注入替换halo-theme-joe3.0主题默认菜单栏图标-CSDN博客


排查过程 & 心路历程(博君一笑~)

  1. 本地看图一切正常,图床显示无碍! 然而一到Halo就无法显示图片…… “为什么?为什么??为什么啊啊啊啊!!!” 🥲

  2. 怀疑对象转向 Halo: “难道是 Halo 的锅?” “还是 typora + PicGo 的插件能让 Gitee 图床突破天际?”🤔

  3. 🔍 搜索关键词:“Halo 的文章中不支持外部网站的图片格式” 终于在某论坛看到“防盗链”三个字,可惜我当时没反应过来,错过关键线索(悲)

  4. 尝试用浏览器直接访问 Gitee 图片链接,居然能正常打开! “这不是 Gitee的问题吧?那是谁的问题?”

  5. 把同样的 Markdown 文档直接搬去 CSDN 上传, 结果:**图片完美显示!**😵

  6. 开始变得聪明,搜索词条升级: “Halo 的文章不支持 Gitee 图床图片”, 果然,发现论坛有人遇到一模一样的问题! 并且有人贴出一条关键链接,标题就叫“Gitee 图片外链”✅

  7. 这时我终于猛然醒悟:

    **“原来一切罪魁祸首,是 Gitee 的——图片防盗链!!!”**🤯🤯🤯

  8. 接着搜: “解决 Gitee 外链防盗链问题” 得到几个方案:

    • 🛑 方案 A:换图床,用其他云服务(没钱 + 懒 = PASS);

    • 🛑 方案 B:用 CDN 做加速(操作复杂 + 不确定性 = 再次 PASS);

  9. 终于守得云开见月明 🌤, 搜索:“Halo 破解 Gitee 图床防盗链的办法”, 答案竟然是:在 HTML 头部加入一行代码!

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

    (??就这??居然就这??)

  10. 然而……我并不知道 Halo 后台哪能加 HTML 头部代码!(悲)

  11. 灵光一闪✨,想起自己在设置博客导航栏的时候看过一个博客提到过“全局注入代码”的地方。 留了这个博客的地址计划笔记,赶紧翻找……

  12. 成功找回那篇博客,找到了注入代码的入口!

  13. 填入那行 <meta> 标签代码,保存重启……

  14. Boom!图片全都显示啦!!!🌈🎉


获得的经验教训总结:

  • 遇事别慌,论坛走一波,关键词比你“冥想”重要一百倍

  • 保留前人博客和整理笔记的习惯值得坚持;

  • 当时应该提取号关键词:说清楚平台/场景+提取其他回答的关键词分析,得出关键的搜索词条;

  • 问AI,看有什么可能问题和解决方法——前面心路历程中也参考了AI的问答,让AI帮我一起意识到了真正的问题。

0

评论区