node.js - Heroku 上的服务器请求中断 (H18)
问题描述
Heroku 支持不是很有帮助(除了“添加更多日志会有所帮助”之类的提示),所以让我在这里尝试一下。
我们503
最近遇到了很多。503
重现using非常容易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)
(...)
解决方案
结果表明失败的原因是一个非常老的Node.js 错误(我从 Heroku 支持的 Taylor 那里获得了链接)。显然,除了完全处理传入的流之外,还没有解决这个问题。
推荐阅读
- javascript - 如何使用 JavaScript 将按钮元素绑定到对象?
- sql - 如何在 SQL Server 中进行增量加载
- wordpress - Wordpress 搜索代码在本地主机上工作,但不在实时环境中
- html - 网站似乎在 chrome 上缩小了
- react-native - 如何在调试模式下启动本机应用程序而不在开发人员菜单中远程选择调试 js
- git - 为什么在 git push --mirror 期间 git force 更新我的提交?
- html - 为什么我的锚标签没有移动到 div 目标?
- javascript - 外部文件中的角度不起作用
- pascal - 如何将自定义数据类型转换为字符串
- google-apps-script - 传递给客户端代码时服务器端对象丢失