前言概览
在使用 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图片的流程:
3. 解决办法
3.1 针对Halo博客网站搭建
**在页面中加入如下 HTML 元标签,即可绕过 Gitee 的防盗链限制。**自己网站搭建都可以用这个方法,在打包好的index.html中加入如下代码。
<meta name="referrer" content="no-referrer">
步骤一:进入Halo控制台 -> 设置 -> 代码注入

步骤二:在全局head和内容页head加入代码
<meta name="referrer" content="no-referrer">
步骤三:保存

3.2 其他方法(未尝试,仅提供参考)
-
迁移图床,比如不使用gitee,迁移到其他云中,但是需要付费呀(悲)
-
使用CDN加速,个人觉得有点麻烦,但是也是一个需要掌握的技能。
总结
这是一个很常见但又容易忽略的问题:Gitee 图床图片防盗链机制。很多时候在本地或者某些博客平台能正常显示图片,但在 Halo 这样的独立博客中却失效了,本质就是缺少 referrer 控制。
参考博客
使用gitee搭建图床,并解决防盗链问题_gitee上传图片,浏览器能访问吗-CSDN博客
【Blog】通过全局代码注入替换halo-theme-joe3.0主题默认菜单栏图标-CSDN博客
排查过程 & 心路历程(博君一笑~)
-
本地看图一切正常,图床显示无碍! 然而一到Halo就无法显示图片…… “为什么?为什么??为什么啊啊啊啊!!!” 🥲
-
怀疑对象转向 Halo: “难道是 Halo 的锅?” “还是 typora + PicGo 的插件能让 Gitee 图床突破天际?”🤔
-
🔍 搜索关键词:“Halo 的文章中不支持外部网站的图片格式” 终于在某论坛看到“防盗链”三个字,可惜我当时没反应过来,错过关键线索(悲)
-
尝试用浏览器直接访问 Gitee 图片链接,居然能正常打开! “这不是 Gitee的问题吧?那是谁的问题?”
-
把同样的 Markdown 文档直接搬去 CSDN 上传, 结果:**图片完美显示!**😵
-
开始变得聪明,搜索词条升级: “Halo 的文章不支持 Gitee 图床图片”, 果然,发现论坛有人遇到一模一样的问题! 并且有人贴出一条关键链接,标题就叫“Gitee 图片外链”✅
-
这时我终于猛然醒悟:
**“原来一切罪魁祸首,是 Gitee 的——图片防盗链!!!”**🤯🤯🤯
-
接着搜: “解决 Gitee 外链防盗链问题” 得到几个方案:
-
🛑 方案 A:换图床,用其他云服务(没钱 + 懒 = PASS);
-
🛑 方案 B:用 CDN 做加速(操作复杂 + 不确定性 = 再次 PASS);
-
-
终于守得云开见月明 🌤, 搜索:“Halo 破解 Gitee 图床防盗链的办法”, 答案竟然是:在 HTML 头部加入一行代码!
<meta name="referrer" content="no-referrer">(??就这??居然就这??)
-
然而……我并不知道 Halo 后台哪能加 HTML 头部代码!(悲)
-
灵光一闪✨,想起自己在设置博客导航栏的时候看过一个博客提到过“全局注入代码”的地方。 留了这个博客的地址计划笔记,赶紧翻找……
-
成功找回那篇博客,找到了注入代码的入口!
-
填入那行
<meta>标签代码,保存重启…… -
Boom!图片全都显示啦!!!🌈🎉
获得的经验教训总结:
-
遇事别慌,论坛走一波,关键词比你“冥想”重要一百倍;
-
保留前人博客和整理笔记的习惯值得坚持;
-
当时应该提取号关键词:说清楚平台/场景+提取其他回答的关键词分析,得出关键的搜索词条;
-
问AI,看有什么可能问题和解决方法——前面心路历程中也参考了AI的问答,让AI帮我一起意识到了真正的问题。

评论区