最近在学习过程中碰到一个问题,以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);
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.