无法使referer头工作

时间:2016-08-23 10:54:21

标签: javascript node.js api express request

我为第三方服务设置了代理服务,目前看起来像这样:

app.use('/service', (req, res) => {
  let url = `http://www.service.com/endpoint/${config.POSTCODER_KEY}${req.url}`
  req.headers['Referer'] = 'my.domain.com'
  console.log(req.headers['Referer'])
  req.pipe(request(url)).pipe(res)
})

正如您所看到的,我正在尝试将Referer标头添加到请求中,它似乎工作为console.log打印出'my.domain.com'但是请求失败并且我从服务返回的错误是403未经授权参考Referer标题。当我在检查器工具中检查网络时,我的引用程序显示为localhost。

我在Postman api客户端(https://www.getpostman.com)中通过将Referer设置为我的白名单域来测试它并且它可以工作。我不确定为什么它使用localhost和express。

1 个答案:

答案 0 :(得分:1)

将流组合在一起只会传输这些流中的数据。标题不是其中的一部分。当您req.pipe(request(url))时,您只是将请求正文写入代理请求。如果要设置用于代理请求的标头,则必须将它们传递给request,如:

req.pipe(request({ url: url, headers: req.headers })).pipe(res);

但是,正如my answer to your previous question中所述,当代理响应到达时,您还需要在res上正确设置标头。