http-proxy-middleware 中的 60 秒超时

IT技术 node.js reactjs timeout create-react-app http-proxy-middleware
2022-08-02 00:37:24

chimurai/http-proxy-middleware使用in时我看到 60 秒超时Create-React-App,我不明白它来自哪里。

我在端口 5000 上运行 API 并配置setupProxy.js

const { createProxyMiddleware } = require("http-proxy-middleware");

const TIMEOUT = 30*60*1000;
module.exports = (app) => {
  app.use(
    "/api",
    createProxyMiddleware({
      target: "http://127.0.0.1:5000",
      changeOrigin: true,
      pathRewrite: {
        "^/api": "",
      },
      proxyTimeout: TIMEOUT,
      timeout: TIMEOUT,
      onError: (err, req, res) => console.log(err)
    })
  );
};

我使用生成一个文件

dd if=/dev/zero of=large.file bs=1048576 count=2048

然后使用 curl

ENDPOINT="http://localhost:3000/api/v1/storage"
RATELIMIT=10M

curl -X POST $ENDPOINT -H "accept: application/json" -H "Content-Type: multipart/form-data" -F "file=@big.file" -w "@curl-format.txt" --limit-rate $RATELIMIT --verbose

curl产生

* Recv failure: Connection reset by peer
* stopped the pause stream!
* Closing connection 0

在浏览器(Chrome 和 Firefox)中可以看到相同的行为。

在节点 v12.18.3 中这没有问题,但它似乎在 v13.x 和 v14.x 中很普遍。

2个回答

触发此事件的超时来自 Node 的 HTTP 堆栈。似乎如果 POST 正文作为流被使用,则headersTimeout在请求正文完全上传之前不会被取消。

尝试设置server.headersTimeout一个较大的值,例如server.headersTimeout = 1000 * 600.

目前 GitHub 上有一个似乎相关的未解决问题,因此这实际上可能是一个错误。

我也一样。我在这里找到了一个解决方案:https ://npmmirror.com/package/http-proxy-middleware/v/1.2.0-beta.1 。

将此添加到您的 createProxyMiddleware 参数中:

onProxyReq: fixRequestBody