TexxTyRe
@TexxTyRe
Software Developer

Как получить 408 ошибку в браузере?

Есть простой сервер koa. Есть Chrome. На сервере есть такой код:
router.post(/\/api\/gw\/query/, async (ctx, next) => {
    await sleep(6 * 60000); // 6 минут
});


В исходнике хрома есть такое про соединение
int64_t g_used_idle_socket_timeout_s = 300; // 5 minutes

На моем сервере есть такое:
server.keepAliveTimeout = 2000;
server.headersTimeout = 2000;


Я могу получать только 504 таким образом
// server.setTimeout(5000);

Но я пытаюсь понять как получить 408 не отправляя "руками" ее с сервера. Если такое вообще возможно.
А если нет, то когда и при каких условиях отправляется 408?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
TexxTyRe
@TexxTyRe Автор вопроса
Software Developer
Оказалось все очень просто

Нужно добавить таймаут (лучше делать для конкретного запроса) в реквесте
router.post(/\/api\/gw\/query/, async (ctx, next) => {
    ctx.request.socket.setTimeout(4000);
    await sleep(6 * 60000); // 6 минут
});


И добавить обработчик таймаута для сервера

const server = app.listen(3000);
server.on('timeout', (socket) => {
    console.log('timeout', socket)
    socket.write([
        'HTTP/1.1 408 Request Timeout',
        'Connection: close'
    ].join('\n') + '\n\n');

    socket.end();
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы