Heroku上的服务器请求中断(H18)

时间:2019-06-07 17:24:01

标签: node.js express heroku multipartform-data

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

我们最近遇到了很多503。使用503复制curl非常容易:

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)
(...)

1 个答案:

答案 0 :(得分:0)

结果表明,失败的原因是一个非常古老的Node.js bug(我从Heroku支持人员那里得到了Taylor的链接)。显然,除了完全处理传入的流之外,尚无此解决方法。