我为第三方服务设置了代理服务,目前看起来像这样:
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。
答案 0 :(得分:1)
将流组合在一起只会传输这些流中的数据。标题不是其中的一部分。当您req.pipe(request(url))
时,您只是将请求正文写入代理请求。如果要设置用于代理请求的标头,则必须将它们传递给request
,如:
req.pipe(request({ url: url, headers: req.headers })).pipe(res);
但是,正如my answer to your previous question中所述,当代理响应到达时,您还需要在res
上正确设置标头。