Leser: 16
2014-09-20T08:10:42 GwenDragonSetz doch bitte mal in der httpd.conf den Timeout hoch und starte den Apache neu!
2014-09-20T08:10:42 GwenDragonSendet das AJAX an die gleiche URL wie das CGI?
Quote... Formular, das durch Klick abgesendet wird. Während es auf Antwort wartet läuft per Ajax alle zwei Sekunden ein Request der den Fortschritt der Aktion anzeigt.
2014-09-20T08:48:49 rostiund alles zusammen auf AJAX umzustellen
2014-09-20T08:48:49 rostiHTML5-Tag progressbar.
2014-09-20T08:48:49 rostiEs ist möglich, dass der Client selbst einen 504 ausgibt, wenns mal wieder länger dauert.
2014-09-21T06:43:01 biancawenn er vom Apache käm, müsste das dann im error.log stehen, wenn das die Einstellung LogLevel error hat?
2014-09-21T06:56:16 bianca2014-09-21T06:43:01 biancawenn er vom Apache käm, müsste das dann im error.log stehen, wenn das die Einstellung LogLevel error hat?
Hab ich mir gerade selbst beantwortet: Script timed out before returning headers: meinscript.pl, referer: domain.... steht drin.
'http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#1xx_Informational'102 Processing (WebDAV; RFC 2518)
As a WebDAV request may contain many sub-requests involving file operations, it may take a long time to complete the request. This code indicates that the server has received and is processing the request, but no response is available yet.[2] This prevents the client from timing out and assuming the request was lost.
2014-09-20T11:42:40 GwenDragonGegen Client-Timeout hilft vielleicht in Abständen einen Status 102 Processing zu senden.
Das muss das Skript erledigen in einem geforken Prozess!
2014-09-21T08:03:39 MuffiKannst du nicht regelmässig irgendwelche Daten rausschicken?
1
2
3
4
5
6
7
Im Elternprozess HTTP-Header an Browser senden
Kindprozess erzeugen
Wenn Elternprozess am Ende, dann Kindprozess beenden
Im Kindprozess
mit alarm eine Sub
die jede Minute mit print das Zeichen an den Browser sendet
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
#!/usr/bin/perl -w use strict; use warnings; use CGI; use CGI::Carp 'fatalsToBrowser'; use IO::Handle; STDOUT->autoflush(1); alarm 1800; my $dauer_in_sekunden = 600; (my $script = $0) =~ s/^.*[\\\/]//g; my $cgi = new CGI; if (defined $cgi->param('formular')) { sleep($dauer_in_sekunden); print STDOUT CGI->new->header(-charset => 'UTF-8').<<HTML_TEIL <!DOCTYPE HTML> <html> <head> <title>Test mit Perlscript gegen http Status 504</title> </head> <body> <div style="color:red;">FERTIG OHNE TIMEOUT!!</div> </body> </html> HTML_TEIL ; } elsif (defined $cgi->param('ajax')) { print STDOUT CGI->new->header(-charset=>'UTF-8').'weiter' if $cgi->param('diff') < $dauer_in_sekunden; } else { print STDOUT CGI->new->header(-charset=>'UTF-8').<<HTML_TEIL <!DOCTYPE HTML> <html> <head> <title>Test mit Perlscript gegen http Status 504</title> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script> function los() { var epo_start = new Date(); var ms = epo_start.getTime(); var rhythmisch = function() { var epo_jetzt = new Date(); var diff = (epo_jetzt.getTime()-ms)/1000; var ausgabe = 'nach '+diff+' Sekunde(n)'; jQuery('#out').html(ausgabe); console.log(ausgabe); jQuery.ajax({ url: '$script', data: 'ajax=set&diff='+diff, type: 'POST', cache: false, success: function(data) { if (data == 'weiter') { window.setTimeout(function() { rhythmisch(); },1000); } else { jQuery('#out').html('Kein weiter erhalten<br>'+jQuery('#out').html()); } }, error: function() { alert('Fehler'); } }); }; document.formular.submit(); rhythmisch(); } </script> </head> <body> <form action="$script" name="formular" method="post"> <input type="hidden" name="formular" value="set"> </form> <input type="button" value="Los geht's mit einem Test über $dauer_in_sekunden Sekunden" onclick="los();"> <div id="out" style="padding-top:20px;"></div> </body> </html> HTML_TEIL ; }
2014-09-22T07:27:49 biancaJa, durcheinander kommen, das passiert. Nein, hier wird niemand gehauen oder geschimpft deswegen. Das Forum soll freundlich, offen und für alle da sein.Ich kann es selbst nicht fassen, die Lösung war jetzt doch ganz einfach aber bitte schlagt mich nicht!
Ich hatte das TimeOut 3000 in der falschen httpd.conf. Habe hier mehrere lokale Server und bin durcheinander gekommen.
2014-09-22T07:27:49 biancaKein Problem. Leute, die antworten wollen, tun das auch, wenn sie dafür Zeit haben.Vielen Dank für eure Zeit, tut mir leid. War keine Absicht.