You should do the flush after the ContentType - content_type is header the H3 is body of the response or at least it should be.
As for your second question, you are looking at a javascript based solution - this isn't something a server side code can do. Look into a sleep followed by a window.location.href. This wont help your long running process though since the refresh will trigger another dump and tar. What you need to do is send the header and flush followed by the system commands - once rflush has happened the client side will wait forever without a timeout. On Tue, May 13, 2025 at 7:24 PM Vincent Veyron <vv.li...@wanadoo.fr> wrote: > On Tue, 13 May 2025 14:57:15 -0500 > Mithun Bhattacharya <mit...@gmail.com> wrote: > > Hi Mithun, > > > Hence if you are writing a mod_perl handler for such an endpoint you > return > > success immediately and then start processing the request. In most cases > > this is simply a matter of doing $r->print on the headers followed by > print > > of two new lines. > > > > Nice! > > Your comment made me revisit mod_perl's documentation, and I found this : > > > https://perl.apache.org/docs/2.0/user/coding/coding.html#Forcing_HTTP_Response_Headers_Out > > The following works, where exportation($r) is the long running sub that > builds a tar file and returns a page with a link to the file, for the user > to click. '<h3>Building tar file</h3>' does get sent first, then the rest > of the response after completion of the sub. > > > $r->content_type('text/html; charset=utf-8') ; > > $r->print('<h3>Building tar file</h3>') ; > > $r->rflush; # send the headers out > > $r->print( exportation($r) ) ; > > return Apache2::Const::OK ; > > > This is great, I can thus send a message to the user, maybe with an > estimated time of arrival. Thanks for the help. > > I have an another question, if I may. > > Is there a way I could do : > > $r->print('<h3>Building tar file</h3>') ; > > every second or other until the tar file is built? I can't seem to think > of one. > > My handler calls an sql script that dumps the database with system() : > > @args = ('psql', '-f', '/path/to/script/to/export_raw_data.sql', '-v', > 'id_client=' . $r->pnotes('session')->{id_client}, '-v', 'database=' . > $database, 'postgres') ; > > system(@args) == 0 or warn "system @args failed: $!" ; > > then waits for the resulting file before proceeding to compress and tar > it, also with a system() call. > > How can I wrap this in a loop that re-sends the 'Building tar file' > message until the file exists? > > > > -- > Bien à vous, Vincent Veyron > > https://marica.fr/ > Logiciel de suivi des contentieux juridiques, des sinistres d'assurance et > des contrats >