【问题标题】:Unable to get referer headers working无法使引用标头工作
【发布时间】:2016-08-23 10:54:20
【问题描述】:

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

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。

【问题讨论】:

  • 尝试添加协议http://my.domain.com
  • @mplungjan 这只是一个示例,我将其设置为我的实际域。你能扩展协议建议吗?作为前置 http 或 https 的作品
  • 也许该服务只允许某些域
  • @mplungjan 确实我正在 Postman api 客户端 (getpostman.com) 中通过将 Referer 设置为我的白名单域来测试它,它可以工作。

标签: javascript node.js api express request


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢您,您对这些问题的解释非常好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多