【问题标题】:60 second timeout in http-proxy-middlewarehttp-proxy-middleware 中的 60 秒超时
【发布时间】:2020-07-15 09:13:25
【问题描述】:

当我在 Create-React-App 中使用 chimurai/http-proxy-middleware 时,我看到 60 秒超时,我不明白它是从哪里来的。

我在端口 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 中很普遍。

【问题讨论】:

    标签: node.js reactjs timeout create-react-app http-proxy-middleware


    【解决方案1】:

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

    尝试将server.headersTimeout 设置为较大的值,例如server.headersTimeout = 1000 * 600。

    目前 GitHub 上有一个 open issue 似乎相关,所以这实际上可能是一个错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-26
      • 2017-03-05
      • 2019-06-14
      • 2019-05-23
      • 1970-01-01
      • 2022-07-13
      • 1970-01-01
      • 2018-05-08
      相关资源
      最近更新 更多