节点 - 告诉请求的来源

Joe*_*eet 16 request node.js

是否可以区分直接来自浏览器中的URL的请求与从远程网页调用的资源之间的区别?

例如,当有人在网络浏览器中直接访问我的网址(在http://mywebsite.com中输入)时,我想提供一个网页,但是当用户通过来自单独域的网址调用我的应用上的资源时(比如<img src='http://mywebsite.com' />)然后我想提供不同的内容.

我查看了请求和标题,但无论如何看起来都一样

Gat*_* VP 25

我想你正在寻找中的referer字符串request.header.

所以简单版本看起来像这样:

http.createServer(function (req, res) {
  var ref = req.headers.referer;

  if(ref) {
    // serve special content
  }
  else {
    // serve regular homepage
  }
}).listen(1337, '127.0.0.1');
Run Code Online (Sandbox Code Playgroud)

编辑了答案以反映下面anu的输入 - 它应该是 referer

  • 因此不保证设置`referrer`字段.一些浏览器和安全套件将其删除.您可能希望执行更传统的操作,例如向图像URL添加查询字符串以跟踪源用户. (3认同)
  • @JoeLongstreet这是`req.headers.referer`而不是`req.headers.referrer`(虽然,引用是正确的拼写;请参阅http://en.wikipedia.org/wiki/HTTP_referer#Origin_of_the_term_referer了解混乱的历史).这就是它未定义的原因.大多数浏览器在发送之前将其设置在请求标头中.有趣的是,`document.referrer`,`referrer`的正确拼写为您提供客户端的推荐人信息. (2认同)

Imd*_*aim 5

在中间件中,您必须使用这种方式“ req.headers.origin”

app.use(function(req, res, next) {
    //var origin=req.headers.origin
    next();
});
Run Code Online (Sandbox Code Playgroud)