我的Meteor应用程序中有一个服务器端路由,例如,我可以获取客户端的IP:
this.route('foo', {
where: 'server',
path: '/bar',
action: function () {
var ip = context.request.connection.remoteAddress;
}
});
如何访问referer字段?我需要使用Meteor Headers吗?
答案 0 :(得分:3)
您可以直接访问连接请求对象,该对象具有标题:
this.request.headers['referer']
像这样:
Router.map(function () {
this.route('foo', {
where: 'server',
path: '/bar',
action: function () {
console.log("All headers:", this.request.headers);
console.log("Referer:", this.request.headers['referer']);
}
})
});
答案 1 :(得分:1)
我遇到了同样的问题,经过一些挖掘后我发现源页面是否安全(HTTPS),浏览器不会发送引用。
如果源文档位于本地计算机上,则无法使用引用程序。这让我误解了一段时间,因为我只是在桌面上创建test.html
进行测试......
因此,阻止从其他网站直接请求此路由的路由中的代码现在看起来像这样:
action: function () {
var self = this;
var host = self.request.headers.host;
var referer = self.request.headers.referer;
var regex = new RegExp("^http(?:s)?://" + host);
if(typeof self.request.headers.referer !== "undefined" && !regex.test(referer)) {
Meteor.log.error("Access blocked from " + referer);
self.response.statusCode = 403;
self.response.end(Handlebars.templates['403']());
return;
}
}
如果设置了referer,则必须与当前主机名匹配。
答案 2 :(得分:1)
您可以使用document.referrer获取该信息
或者你可以使用History API: history.go(-1);