Один из способов - заставить первоначальный запрос возвращать экран удержания с надписью «Мы генерируем отчет ...», включая токен запроса и JavaScript (обычно AJAX) для периодической передачи токена запроса обратно в веб-приложение, чтобы посмотрите, готов ли отчет, и отобразите его, когда он есть.
Если в коде веб-приложения есть какие-либо сведения о том, как далеко продвинулся отчет, об этом прогрессе можно сообщать и через AJAX.
Таким образом, на каждый запрос поступает ответ в течение достаточно короткого периода времени, но «сеанс» генерации отчета поддерживается с помощью идентификатора токена. Когда отчет будет завершен на сервере, вы, вероятно, захотите сохранить его в кеше где-то до тех пор, пока он не будет запрошен, и через некоторое время истечет срок его действия, если браузер был закрыт.
О, и приятный побочный эффект, о котором я раньше не упоминал - пользователь видит, что веб-приложение все еще живо, и у него все еще есть сетевое подключение к нему. Оставление курсора на пару минут может расстраивать:)