解决 Halo 博客文章中 Gitee 外链图片无法显示的问题
解决Halo博客文章中gitee外链图片无法显示的问题
前言
在使用 Halo 博客平台撰写 Markdown 文章的过程中,我遇到了一个令人困扰的问题:文章中的图片链接来自 Gitee 图床,但在 Halo 博客中却无法正常加载显示。
一、问题现象
具体表现如下:
- 我使用的是 PicGo 配合 Typora,在本地写 Markdown 时上传图片至 Gitee 图床;
- 在本地预览(Typora)中,图片正常显示;
- 将 Markdown 文件直接上传到 CSDN 等平台时,图片也能显示;
- 直接用浏览器打开 Gitee 图床链接,图片可以访问,无需登录;
- 但在 Halo 博客中发布文章后,图片全部加载失败,呈现空白。
二、本质原因
经过一番搜索与排查,我发现这是由 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.1 针对Halo博客网站搭建
**在页面中加入如下 HTML 元标签,即可绕过 Gitee 的防盗链限制。**自己网站搭建都可以用这个方法,在打包好的index.html中加入如下代码。
1 | <meta name="referrer" content="no-referrer"> |
3.1.1 步骤一:进入Halo控制台 -> 设置 -> 代码注入

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

3.2 其他方法(未尝试,仅提供参考)
- 迁移图床,比如不使用gitee,迁移到其他云中,
但是需要付费呀(悲) - 使用CDN加速,个人觉得有点麻烦,但是也是一个需要掌握的技能。
四、参考博客
使用gitee搭建图床,并解决防盗链问题_gitee上传图片,浏览器能访问吗-CSDN博客
【Blog】通过全局代码注入替换halo-theme-joe3.0主题默认菜单栏图标-CSDN博客
总结
这是一个很常见但又容易忽略的问题:Gitee 图床图片防盗链机制。很多时候在本地或者某些博客平台能正常显示图片,但在 Halo 这样的独立博客中却失效了,本质就是缺少 referrer 控制。
