好比百度百科的一些图片,右键复制了图片的网页地址,在<img>标签中使用该地址时,显示的图片却提示’该图片仅限百度用户内部交流使用‘。这种状况就是作了图片防盗链的处理html
图片防盗链node
·盗链是指服务提供商本身不提供服务的内容,直接在本身的网站上向最终用户提供其余服务提供商的服务内容,在请求头有个Referer属性,查看是否域名与server的一致express
·从一个网页跳转,或者网页引用到某个资源文件时,HTTP请求中带有referer表示来源网页的url浏览器
·用浏览器直接访问图片网址时没有referer服务器
/** * 图片防盗链 * Referer:http://localhost:63342/node201509/20.express_ext/img.html */
var express = require('express'); var path = require('path'); var app = express(); //判断用户是否有权限访问此图片
app.use('/img',function(req,res,next){ var whitelist = ['b.zf.cn'];//设置白名单,容许 哪些主机过来请求
var referrer = req.headers.referer; console.log(referrer); if(!referrer) return next(); var referHost = require('url').parse(referrer).host.split(':')[0]; if(referHost === req.host || whitelist.indexOf(referHost)!=-1){ return next(); } res.sendFile(path.join(__dirname,'img','wrong.jpg')); }); app.use(express.static(__dirname)); //返回HTML
app.get('/',function(req,res){ res.sendFile(path.join(__dirname,'img.html')); }); app.listen(8080);
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 本服务器访问 <img src="/img/baidu.png" alt=""> <br/> a.zf.cn服务器访问 <img src="http://a.zf.cn:8080/img/baidu.png" alt=""> <br/> b.zf.cn服务器访问 <img src="http://b.zf.cn:8080/img/baidu.png" alt=""> </body> </html>