node.js - Heroku 上的服务器请求中断 (H18)

标签 node.js express heroku multipartform-data

Heroku 支持不是很有帮助(除了“添加更多日志会有所帮助”之类的提示),所以让我在这里尝试一下。

我们最近遇到了很多503。使用 curl 重现 503 非常简单:

curl —limit-rate=100 -s -X POST https://our.server.com/some/endpoint?[1-100] \
   --header 'Content-Type: multipart/form-data; boundary=---------BOUNDARY' \
   --data-binary @test.txt

如果test.txt足够大(例如1Kb),Heroku很快就会触发503(顺便说一句,它甚至不需要是多部分表单数据)。因此,我假设存在某种 DDoS 保护,因为即使在我们极其简单的 Node.js + Express 应用程序以及我同事的 Node 应用程序上也会发生这种情况。

如果是这种情况 - 有什么方法可以消除 503 错误吗?

这些最近开始让我们烦恼,因为我们的端点之一现在期望多部分数据(但我会重复 - 这不一定是多部分数据,它也可以使用 application/json 重现)。如果身份验证失败 - 我们会发送 401。似乎还不足以关闭多部分流?

据我了解,Heroku 缓冲多部分流,导致某种缓冲区溢出,结果 -> 触发 503

代码:

(...)
const router = require('express').Router()
// We are getting `401` for the first 10-100 requests, then -> 503 hopes in
router.post('/some/endpoint', async function (req, res, next) {
   return res.status(401).send('Test')
})
app.use('/', router)
(...)

最佳答案

结果发现失败的原因是一个非常古老的Node.js bug (我从 Heroku 支持的 Taylor 那里得到了链接)。显然,除了完全处理传入流之外,还没有解决这个问题。

关于node.js - Heroku 上的服务器请求中断 (H18),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56498812/

相关文章:

javascript - 无法让 Angularjs 在渲染模板之前等待数据

node.js - 在browserify中需要cdn库而不将其捆绑在最终的js文件中

javascript - 解析服务器登录返回一个用户,但 req.user 未定义

node.js - 是否可以在 Express.js 中命名路由

ruby-on-rails - 如何使 "assets:precompile"不加载数据库? ( rails )

php - NodeJS 如何对 Buffer 进行哈希处理?

javascript - Angular,使用express和mySql向客户端显示数据

ruby-on-rails - 尝试在 Heroku 上部署应用程序时出现错误 "Undefinded method "load_defaults""

git - Heroku、Procfile 和 gitignore

node.js - Sails.js Waterline ORM : . findOrCreate() 没有 .populate() 方法