流星铁路由器中的HTTP请求引用

时间:2014-04-12 16:33:03

标签: meteor iron-router

我的Meteor应用程序中有一个服务器端路由,例如,我可以获取客户端的IP:

this.route('foo', {
    where: 'server',
    path: '/bar',
    action: function () {
      var ip = context.request.connection.remoteAddress;
    }
  });

如何访问referer字段?我需要使用Meteor Headers吗?

3 个答案:

答案 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);