【问题标题】:How to set Access-Control-Allow-Headers header in node-http-proxy如何在 node-http-proxy 中设置 Access-Control-Allow-Headers 标头
【发布时间】:2021-03-20 02:22:35
【问题描述】:

我正在使用coinbase-pro library 通过本地主机上的表单向 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.

【问题讨论】:

    标签: node.js cors http-proxy coinbase-api node-http-proxy


    【解决方案1】:

    答案是here

    我认为修改代理响应头在当前文档中没有涉及。

    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,例如proxyRes.headers[key] = value,而不是依赖res.setHeader(key, value),因为当代理目标响应标头中已经存在密钥时,res.setHeader 不起作用。

    【讨论】:

      猜你喜欢
      • 2013-08-02
      • 2016-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2015-11-26
      相关资源
      最近更新 更多