请求头中的 Referer 可能导致 403( Forbidden)错误?

2015-04-29 14:30:50 +08:00
 Tsung1990

最近在学习过程中碰到一个问题,以localhost形式打开页面后,下面这段HTML标签无法获取远程的图片内容(403错误),但是如果直接以FILE的形式打开页面则可以获取正确的图片信息。猜测是请求头中的Referer引起的,但我对HTTP不是太熟悉,所以想请问大神是否是这个原因,另外服务器端为什么要这么作这样的限制?

<img src="http://pic2.zhimg.com/68f9ef80e049bf3d943317f5f8700d8d.jpg" />

为证实这个想法,我用了下面这段Node程序,

var fs = require('fs'),
    http = require('http');

var option = {
    host: 'pic2.zhimg.com',
    path: '/68f9ef80e049bf3d943317f5f8700d8d.jpg',
    method: 'GET',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Referer': "http://localhost:8080/index.html",   // 如果注释这行就没有问题
        'User-Agent': "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"
    }

};

http.get(option, function (res) {
    res.pipe(fs.createWriteStream('out.jpg')).on('finish', function () {
        console.log('finish loading');
    });
}).on('error', function (err) {
    console.error('got error', err);
});
5440 次点击
所在节点    Node.js
6 条回复
ooxxcc
2015-04-29 14:33:10 +08:00
google 防盗链
Arrowing
2015-04-29 14:44:30 +08:00
防盗链+1
Tsung1990
2015-04-29 14:47:02 +08:00
@ooxxcc 谢谢,涨见识了,那请问如果我需要引用相关链接有哪些途径呢?
cevincheung
2015-04-29 14:52:46 +08:00
@Tsung1990 需要把图片存储到本地然后再引用。
Arrowing
2015-04-29 14:52:57 +08:00
@Tsung1990 服务器读取远程图片,然后再显示?
gamexg
2015-04-29 14:57:45 +08:00
[转载] 通过JS破解图片防盗链限制
http://www.cnblogs.com/hooray/archive/2011/05/12/2044744.html

这个方法不用服务器参与,直接用脚本即可。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/187234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX