Поддержка 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 достаточно велик (например, 1 КБ), 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)
(...)