node 图片制作防盗链中间件
我们可以在自己的网站上挂外链,就是别人的图片连接,这样对于自己的网站来说,节约不少的成本,但是对于提供方的来说,确实一笔带宽不小的消耗。,如果避免这个问题呢?
上代码
// 图片防盗链处理的中间件 const url = require('url'); const path = require('path'); module.exports = (req, res, next) => { // 判断后缀名是否为一个图片,如果不是图片,直接放行 const extArr = ['.jpg', '.jpeg', '.png', '.gif']; const ext = path.extname(req.url); if (!extArr.includes(ext)) { next(); return; } const oriHost = req.headers['host']; let refHost = req.headers['referer']; if (refHost) { refHost = url.parse(refHost).host; } // 别人在盗用你的图片l if (refHost && refHost !== oriHost) { req.url = '/upload/wuqing.gif'; // 重定向图片地址 } next(); }
效果:
真实的图片路径
原理
如果从自己的服务器中访问使用外链,浏览器会告诉外链方中,请求头会加一个refere 的请求头,用于标记该网页的来源服务器是哪个地址或者域名。如果是自己的服务访问自己的资源,浏览器是不会携带该请求头的或者携带的请求头和host是一样的,所以我们就可以使用referer这个浏览器所携带的特性。
B服务器访问A服务的资源
A服务器访问A服务的资源