node.js - 如何在 node-http-proxy 中设置 Access-Control-Allow-Headers 标头
问题描述
我正在使用coinbase-pro 库通过 localhost 上的表单向 coinbase 沙箱 api 发出发布请求。我正在尝试使用node-http-proxy来解决 CORS 错误,但没有成功。我一直在为此撞墙一段时间,任何帮助将不胜感激。
const express = require("express");
const httpProxy = require("http-proxy");
const port = 5050;
const app = express();
const proxy = httpProxy.createProxyServer({});
app.use(function(req, res) {
delete req.headers["origin"];
delete req.headers["referer"];
delete req.headers["host"];
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Content-type, cb-access-key,cb-access-passphrase,cb-access-sign,cb-access-timestamp"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET,POST,PUT,DELETE,OPTIONS"
);
const apiURL = 'https://api-public.sandbox.pro.coinbase.com'
proxy.web(req, res, { target: apiURL });
});
app.listen(port, () =>
console.log("Started proxy on port", port)
);
错误:
Access to fetch at 'http://localhost:5050/orders' from origin 'http://localhost:3000' has been blocked by CORS policy: Request header field cb-access-passphrase is not allowed by Access-Control-Allow-Headers in preflight response.
解决方案
答案在这里:
我认为修改代理响应头不在当前文档中。
proxy.on('proxyRes', function(proxyRes, req, res) {
console.log('Raw [target] response', JSON.stringify(proxyRes.headers, true, 2));
proxyRes.headers['x-reverse-proxy'] = "custom-proxy";
proxyRes.headers['cache-control'] = "max-age=10000";
console.log('Updated [proxied] response', JSON.stringify(proxyRes.headers, true, 2));
// Do not use res.setHeader as they won't override headers that are already defined in proxyRes
// res.setHeader('cache-control', 'max-age=10000');
// res.setHeader('x-reverse-proxy', 'custom-proxy');
});
关键是使用proxyRes
内部"proxyRes"
事件 likeproxyRes.headers[key] = value
而不是依赖res.setHeader(key, value)
asres.setHeader
在代理目标响应标头中已经存在密钥时不起作用。
推荐阅读
- python - 尝试实现逻辑回归,但 gridsearchCV 显示输入变量的样本数量不一致:[60000, 60001]
- javascript - 我们如何在 JS 中处理多个 setIntervals()?
- angular - Angular从谷歌地图组件中的地点ID获取纬度和经度
- html - 是否可以在 flexbox 项目之间创建灵活的间距?
- c# - 如何在 Prism 的“OnNavigatingTo”中为任何和所有类执行操作
- cloud - 更改 CloudForms 中 Openstack 提供程序的刷新间隔以定期运行
- laravel - Laravel 重定向你太多次错误
- javascript - 使用数组中的 .map() 进行配置。从 Firebase 获取数据并在 React Native 中以类似火种的卡片视图输出
- selenium - Scrapy Selenium geckodriver 问题 - 尝试抓取时出错
- r - 如果 negate = TRUE,StringR str_detect 删除 1 个 obs,但如果 negate = FALSE,则保留 0 个观察值