解决hexo引入图床,手机和web不显示图片的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决hexo引入图床,手机和web不显示图片的问题相关的知识,希望对你有一定的参考价值。

参考技术A hexo引入图片的方式有很多种:

Hexo使用图床的方式加载在blog中加载图片,会在非本人的电脑或者手机端报“html访问图片资源403问题(http referrer)”,导致采用图床方式加载的图片全部无法加载。

http请求体的header中有一个referrer字段,用来表示发起http请求的源地址信息,这个referrer信息是可以省略但是不可修改的,就是说你只能设置是否带上这个referrer信息,不能定制referrer里面的值。

服务器端在拿到这个referrer值后就可以进行相关的处理,比如图片资源,可以通过referrer值判断请求是否来自本站,若不是则返回403或者重定向返回其他信息,从而实现图片的防盗链。上面出现403就是因为,请求的是别人服务器上的资源,但把自己的referrer信息带过去了,被对方服务器拦截返回了403。

在前端可以通过meta来设置referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考 这里 。所以针对上面的403情况的解决方法,就是把referrer设置成 no-referrer ,这样发送请求不会带上referrer信息,对方服务器也就无法拦截了。

浏览器中referrer默认的值是 no-referrer-when-downgrade ,就是除了降级请求的情况以外都会带上referrer信息。降级请求是指https协议的地址去请求http协议,所以上面403的情况还有另一种解决方法就是,请求的图片地址换成http协议,自己的地址使用http协议,这样降级请求也不会带上referrer。

在G:\blog\themes\butterfly\layout\includes目录下有一个head.pug文件,修改该文件的meta信息,会使生成的所有页面都带有该head。在head.pug文件中添加如下内容,结果参见图片。

在G:\blog\themes\yilia\layout_partial目录下有一个head.ejs,同样在head.ejs文件中添加如下meta信息即可

在G:\blog\public\2021目录下就是所有21年生成的blog,找到该目录下的任意一个index.html,用文本编辑器打开就可以看到已经自动生成了referrer标签了。

然后使用hexo d指令将工程同步到github即可

1. 加载本地图片的方法

2. html访问图片资源403问题(http referrer)

解决vite使用alias引入图片不显示的问题

参考: https://juejin.cn/post/7009441745301667853

方法一:配置alias

//app.vue

<img src="/images/logo.png"  />


//vite.config.js

import  defineConfig  from \'vite\'
import vue from \'@vitejs/plugin-vue\'

export default defineConfig(
    base: \'./\',
    plugins: [vue()],
    resolve: 
        alias: 
             \'/images\': \'src/assets/images\',
        ,
    ,
)


方法二:封装函数

//utils.js

const getSrc = (name) => 
    if (typeof name === \'undefined\') return \'error.png\'
    const path = `/src/assets/images/$name.png`
    const modules = import.meta.globEager(\'/src/assets/images/*\')
    return modules[path]?.default


//app.vue

<img :src="getSrc(\'about\')"  />


以上是关于解决hexo引入图床,手机和web不显示图片的问题的主要内容,如果未能解决你的问题,请参考以下文章

使用云服务器搭建图床,Hexo一键部署,太方便啦

Hexo引入Mermaid流程图和MathJax数学公式

解决Hexo博客不显示图片的一种方法

hexo.图片

图床神器:七牛云 + Mpic + FScapture

解决博文图片不显示的问题