【问题标题】:Cannot HTTPS POST json object at 1.5 mb via Koa and koa-body. Status 413 production only无法通过 Koa 和 koa-body 在 1.5 mb 处 HTTPS POST json 对象。仅状态 413 生产
【发布时间】:2023-03-18 15:05:01
【问题描述】:

我正在尝试将一个大约 1.5 mb 的 JSON 对象从我们的 React 客户端上传到我们的 Koa.js node.js 服务器。

我正在将 Koa.js 与 koaBody(koa-body 4.1.1)一起使用。

在 HTTPS 上,在我们的生产环境中,我无法上传对象,我从我们的服务器收到状态 413。但是,在 dev 或 http 中,我上传文件没有问题。我可以将 jsonLimit 更改为 '1mb' 并在 dev 中复制相同的错误,所以我知道格式是正确的。

我已将配置设置为最多可处理“10mb”。这是代码。

.use(koaBody({
  multipart: true,
  json: true,
  jsonLimit: "10mb",
}))

有人有解决办法吗? 我将简单地拆分 JSON 对象,但是我想知道“为什么”这不起作用,因为对我来说 1.5 mb 并不算大。

更新:我已将 jsonLimit 设置为“50mg”,结果没有差异。

更新:我相信这个 413 与我们通过 azure 设置的入口控制器有关。

【问题讨论】:

  • 对象是 1.5 MB 还是 1.5 MB? 10 Mb = 10/8 MB = 1.25 MB,如果对象是 1.5 MB,这是不够的。兆字节和兆比特是不同的。
  • 看起来nginx 介于两者之间。确保主体大小的 nginx 配置也足够大 - 默认为 1 MB。 nginx.org/en/docs/http/…

标签: node.js reactjs koa koa-bodyparser


【解决方案1】:

查看您的屏幕截图,主体大小确实约为 1.5MB(兆字节),但也就是 1.5*8= ~12.5 Mb(兆比特)。因此,请提高 jsonLimit 以适应此情况。

在您的浏览器和您的应用程序之间还有nginx。您需要确保 nginx 的主体大小限制也足够高。在您的配置中找到client_max_body_size - 如果它不存在,请为您的应用程序设置它(例如client_max_body_size 20m;

【讨论】:

  • 我不知道我需要 *8。这是为什么?我将 jsonLimit 设置为 50mb,错误仍然存​​在。这是通过 docker 进行的 Kubernetes 部署。我会通过我的云服务提供商调整 nginx 配置吗?
  • 一兆字节 (MB) 等于八兆位 (Mb)。
  • mb 将是 millibits ;)。但是,koa-bodymb 解释为兆字节。我认为问题在于 nginx 配置,尤其是因为这只在使用 nginx 的生产环境中失败。
  • 这有助于我查看我设置的入口控制器。这可能是目前的瓶颈。
  • @GavinThomas 如果您使用 NGINX 入口控制器,似乎有一种机制可以通过注释控制配置:kubernetes.github.io/ingress-nginx/user-guide/…
猜你喜欢
  • 1970-01-01
  • 2017-05-01
  • 2017-04-10
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多