好久没看自己的博客了,前两天更新后发现图片竟然无法显示。博客中使用的图片大多上传到了 七牛云 的对象存储中,本着省钱没有购买域名,用的是测试域名一月一换,当然有时候懒也许好久都没换。那我们来探个究竟到底发生了什么吧!

打开 chrome 的开发者模式,点击 Console,引入眼帘的是一堆红色的报错 Failed to load resource: net::ERR_SSL_VERSION_OR_CIPHER_MISMATCH,这些全部与图片的地址相关。再仔细看看输出,发现:

Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure element '<URL>'. This request was automatically upgraded to HTTPS, For more information see <URL>

难怪看 html 的 source 还是 http 的,但 chrome 加载资源的时候变成 https 了。这个问题我一直都知道,因为每次部署网页到 netlify 平台上,他们都会贴心的给我发个邮件提醒我这个问题。那怎么办呢?

方法一:把资源的地址变成 HTTPS

本来就是薅羊毛,暂时不指望买个域名,并把它升为 https…

方法二:把博客网页变成 HTTP

因为该博客是部署在 netlify 上的,所以我去查查官方怎么说。

All new sites on Netlify are HTTPS by default | Netlify

嘤嘤嘤,看这个态度应该没太大希望搞。我这是反其道而行之…

其它方法?

因为源代码是 http,只是 chrome 把它自动转成了 https,那如果我们可以控制 chrome 不做这个升级,是不是可以解决这个问题了呢?

于是,我查到 chrome 有这样一个设置: chrome://settings/content/insecureContent,只要在 Allow 中添加 https://hanmei.netlify.app,即我的博客地址,就可以看到图片了。氮素,我寻思着愿意这样折腾的人,那一定是真爱了,谁愿意看个文章还这么麻烦呀!

我尝试添加 Content-Security-Policy 控制图片资源的来源,然而 chrome 仍然照常升级…于是再去看了几眼 chrome 的说明 Chromium Blog: No More Mixed Messages About HTTPS,这条路基本上是走不通了(当然,如果你有解决思路,欢迎评论分享)

现在呢,大概要把买域名的事儿提上日程了…如果您特想看图并且使用的是谷歌浏览器,暂且将就一下使用上面提到的设置。感谢理解 🙏

啊,我怎么能忘了其它浏览器!刚刚测试了一下,safari 支持显示,以及我手机上夸克浏览器也支持显示。可能不用 chrome 最新的内核的浏览器都支持吧… 这个方法可比上面那个设置简单多了,松了一口气。(手机和ipad版本的博客界面没优化过,还有日历那块压缩之后宽度不均匀,我觉得都有点丑,未来有时间会 fix 这个问题)

注:本来这篇文章想写如何在 HTTPS 网页中引入 HTTP 资源,但是翻车了没找到解决方案,就当一个说明吧,为什么我的博客没有图,以及怎么看图。