Firefox 300 s hardcoded Timeout

DjTom-i

Member
[gelöst] Firefox 300 s hardcoded Timeout

Moin,

seit Firefox 29 gibt es ein hardcoded Timeout von 300 s.

Jeder der eine max_execution_time >= 301 Sekunden braucht hat jetzt ein Problem.

Die Verbindung reisst dann einfach ab, es wird nichts auf dem Server gelogged, man hat keinerlei Möglichkeit serverseitig nachzuhelfen.

Ein riesen Problem für zB Shops welche Imports machen.

Nach zu vollziehen wie folgt:

max_execution_time auf 301 Sekunden setzen

PHP:
<?php
sleep(301);
echo "fertig";
?>

Einmal mit Firefox >= 29 aufrufen, also mit dem aktuellen. -> Nach 300 Sekunden bricht die Verbindung ab, es wird nichts gelogged ab 301 Sek max_execution_time
Einmal mit irgendeinem IE aufrufen. -> nach 301 Sekunden erscheint fertig, das Script ist durchgelaufen.

Die Devs wünschen dieses Verhalten so und wissen genau was Sie da getan haben.

Die Devs wurden von mir ausgiebig beschimpft.

Bug ist hier zu finden:
https://bugzilla.mozilla.org/show_bug.cgi?id=1005808

Hoffe es hilft jemanden. Habe da leider Stunden mit dem Debugging mit Plesk und fcgi verbracht weil ich dachte es würde eine von mir änderbare Variable sein.

Gruß
Thomas Toka
 
Last edited by a moderator:
Je nach Umgebung hilft auf Server-Seite das ignore_user_abort() da weiter welches genau für den Zweck einer clientseitig geschlossenen Verbindung existiert.
Es gibt auf Serverseite Sessions und für Clients Ajax sowie für beide jede Menge hübscher Libraries und Frameworks. Es spricht nichts dafür eine monolithische Import-Struktur zu bauen statt Resume-Tauglichkeit. PHP hat in dem Kontext die $_SESSION Variable sowie Klassen-Destruktoren und register_shutdown_function()
Genau wie man nicht erwarten kann dass der Server 300 Sekunden max_execution_time kann, kann man das auch nicht erwarten dass Client, Proxy oder das Netzwerk solche Verbindungen immer zulassen.
Ein solches TImeout hilft eventuell endlich dass Entwickler nicht mehr teils stundenlange Browser-Verbindungen voraussetzen o.ä.

Die Devs wurden von mir ausgiebig beschimpft.
Spende der Mozilla Foundation lieber einen signifikanten Betrag und bitte sie bei Setzen eines bestimmten HTTP-Headers ein anderes Verhalten durch zu lassen. Das hilft vermutlich mehr als Beleidigungen... Alternativ kannst du Firefox forken und einen Marktanteil erkämpfen.
 
Last edited by a moderator:
Probiers einfach aus und wenn du eine Lösung hast her damit!!! Spende dann lieber dir ein paar Kisten Bier als denen. Etwas in den Raum zu werfen ist einfach. I know.

Ansonsten verstehe ich deine Argumente. Diese darfst du gerne den betroffenen Kunden gegenüber aufbringen die hier plötzlich vor diesem Problem stehen.

Freue mich auf den üblichen SSF Shitstorm der jetzt ja eröffnet ist..
 
und wenn du eine Lösung hast her damit!
Ich habe sogar 2 genannt - eine ohne und eine mit Code-Anpassung :D
Komplett ohne Änderung geht es sogar auch, via PHP-Konfiguration ignore_user_abort
Allerdings ist das Setzen nicht sonderlich empfehlenswert da garantiert jede Menge PHP-Applikationen dann deine PHP-Prozesse vollmüllen werden die sich erst nach Ewigkeiten oder teilweise sogar nie terminieren. PHP-Codequalität ist halt oft nicht sonderlich gut....

Diese darfst du gerne den betroffenen Kunden gegenüber aufbringen die hier plötzlich vor diesem Problem stehen.
Ich habe schon ausreichend solcher Support-Tickets gekriegt da Wordpress Anacron auch einen solchen hässlichen und mehr auf Hoffnung denn auf Funktionalität gestützten Code einsetzt. Der wundert sich auch wenn er automatisch gekillt wird nachdem er seinen (leeren) Response Body ausgegeben hat und danach weiterwerkelt. Ich kann dazu nur sagen dass der zugehörige serverseitige Fix nicht grade trivial war aber wenigstens funktioniert =)

Freue mich auf den üblichen SSF Shitstorm der jetzt ja eröffnet ist
Es ist Montag morgen. Wir haben alle eine lange Woche vor uns :P
 
Schau mal unter about:config und suche nach "timeout", vielleicht findet sich etwas. Und natürlich ist es schade, wenn Software nach Änderungen nicht mehr einwandfrei funktioniert aber die FF Devs sind auch keine Idioten und hatten sicherlich gute Gründe für diese Änderung.
 
Last edited by a moderator:
serverseitige Fix nicht grade trivial war aber wenigstens funktioniert =)

es gibt hier serverseitig nix zu melden! :-(

probiers bitte aus. dann komm wieder und gib mir nen link auf eine php Datei mit dem Codeschnipsel...

schwupps gibt's Bier :p
 
Schau mal unter about:config und suche nach "timeout", vielleicht findet sich etwas. Und natürlich ist es schade, wenn Software nach Änderungen nicht mehr einwandfrei funktioniert aber die FF Devs sind auch keine Idioten und hatten sicherlich gute Gründe für diese Änderung.

Danke. Da ist in der Tat eins... Probiere es gerade. Hatte mich eigentlich darauf verlassen das die sagen wenn es so gewollt ist das man es auch nicht tweaken kann, daher garnicht auf die Idee gekommen das dort eine Variable noch sein könnte.

Mache gleich nen Edit obs damit geht..

EDIT: FUCK YEAH. Et geht mit network.http.response.timeout :-)

ALDERON et gibt Bier ;)
 
Last edited by a moderator:
Freut mich, ist zwar für die Kunden nicht ganz schön aber trotzdem recht schnell gefixt.
 
Falls du Bier magst schick mir dein Paypal. Ansonsten spende ich auch gerne ans SSF zwei Kisten oder so.. Nur nicht an die Mozilla Spinner :p
 
Ne, spende lieber ans SSF, damit uns dieses Forum noch lange erhalten bleibt aber trotzdem vielen Dank!
 
Ich danke dir echt. Habe da sonnen Hals bekommen. Die Änderung fiel genau in einen Umzug von einem Kunden zu mir... Kunde sagt natürlich das Serverlein wäre schuld. Gerade wenn fcgi abbricht sieht man das wenn es serverseitig ein Problem ist recht deutlich und schnell. Und es gibt da ja diverse Timouts die man tweaken könnte... Hier war einfach nüx sichtbar in den Logs.

Sorry auch falls ich etwas "erregt" bin. Aber die paar Stunden und die verlorenen Haare bringt mir und dem Kunden keiner zurück.


PS: Einer der Mods/Admins darf mir gerne ne Paypal oder Konto nennen wo ich dann gerne 40 Ocken spende von meinem Privatkonto...
 
Last edited by a moderator:
es gibt hier serverseitig nix zu melden! :-(
Ich weiss nicht wie ich das im Kontext eines verifizierten Webhosting-Anbieters verstehen soll...

dann komm wieder und gib mir nen link auf eine php Datei mit dem Codeschnipsel...
PHP:
<? //Dieses Beispiel wird serverseitig die Berechnung durchführen auch wenn der Client weg ist
ignore_user_abort(true);
set_time_limit(0);
//Weiterer code hier
sleep(301);

PHP:
<? //Dieses Beispiel umgeht den Timeout mit regelmäßigen Paketen
ini_set('output_buffering',0);
header("X-Accel-Buffering: no");
ob_implicit_flush(1);

declare(ticks=1);
register_tick_function('my_function', true);
function my_function()
{
        echo ".";
        flush();
}

//Weiterer Code hier. 
for($i=0;$i<301;$i++)
{
        sleep(1);

}
 
Ich weiss nicht wie ich das im Kontext eines verifizierten Webhosting-Anbieters verstehen soll...

Ausdrucken und übers Bett hängen? Na mal im ernst. Ich bin nicht Rudi Völler. Ich kann nicht alles. Ich mache Fehler. Ich weiß nicht alles.
PHP:
<? //Dieses Beispiel wird serverseitig die Berechnung durchführen auch wenn der Client weg ist
ignore_user_abort(true);
set_time_limit(0);
//Weiterer code hier
sleep(301);

Das funktioniert natürlich nicht. Der User muß Aktionen durchführen auf der Seite nachdem das Script durchgelaufen ist. Der Browser schliesst aber trotzdem. Du mußt dir auch mal was sagen lassen.

PHP:
<? //Dieses Beispiel umgeht den Timeout mit regelmäßigen Paketen
ini_set('output_buffering',0);
header("X-Accel-Buffering: no");
ob_implicit_flush(1);

declare(ticks=1);
register_tick_function('my_function', true);
function my_function()
{
        echo ".";
        flush();
}

//Weiterer Code hier. 
for($i=0;$i<301;$i++)
{
        sleep(1);

}

Das ist leider keine Option weil manche Scripte einfach verschlüsselt sind und du nicht dran kommst.

Finde es klasse wie du dich bemühst. Vielen Dank dafür. Leider liegst du falsch.

PS: Auch der zweite Codeschnipsel bricht ab. Doppel sechs. Setzen.
 
Last edited by a moderator:
Ich weiß nicht wie der Firefox auf das wiederholte senden des HTTP-Headers
Code:
Status: 103 Processing
reagiert.
Aber es löst ja auch nicht immer das Problem bestehender Web-Skripte diverser Sprachen.
 
Ich mache Fehler. Ich weiß nicht alles.
Mag sein. Aber als Webhoster _solltest_ du auf Serverseite die PHP-Konfiguration bearbeiten können...

Der User muß Aktionen durchführen auf der Seite nachdem das Script durchgelaufen ist. Der Browser schliesst aber trotzdem. Du mußt dir auch mal was sagen lassen.
Ich lasse mir gerne was sagen. Wer aber in seinem ersten Beitrag nur rummeckern will und dann bei Lösungsvorschlägen mit Informationen auftrumpft welche er bis dato unterschlagen hat macht sich nur lächerlich.
Generell ist es bei einem Import-Skript egal ob der Client eine Antwort sieht - nur etwaige Fehlermeldungen bleiben ihm dann unterschlagen - dass das hier nicht der Fall ist wäre wichtig zu wissen.

Das ist leider keine Option weil manche Scripte einfach verschlüsselt sind und du nicht dran kommst.
Ob verschlüsselt oder nicht, es ist ein Fehler der PHP-Software zu erwarten dass der Client ewig auf Daten wartet. Es gibt jede Menge Timeouts bis runter auf TCP-Ebene welche eine zeitliche Beschränkung auf Verbindungen setzen. Aus diesem Grund sollte das Produkt als Mangelware beim Hersteller gerügt und auf Nachbesserung bestanden werden sofern möglich.

Auch der zweite Codeschnipsel bricht ab. Doppel sechs. Setzen.
Überprüft ob deine Server-Konfiguration den flush() überhaupt zulässt? Nicht alle PHP-Eindungen unterstützen dies.
 
Generell ist es bei einem Import-Skript egal ob der Client eine Antwort sieht - nur etwaige Fehlermeldungen bleiben ihm dann unterschlagen - dass das hier nicht der Fall ist wäre wichtig zu wissen.

soso generell macht jedes Script also das was du willst und kein Script fragt nach Abschluß der Laufzeit: "Wollen Sie die 30 abweichenden Preise aus dem Dump in die Datenbank übernehmen?".

Hier ist der Punkt erreicht wo ich dich wirklich gerne als .. beleidigen würde.

Ich fasse es nicht beratungsresistent du mit deinem Fachwissen und Erfahrung bist. Jeder Import ist gleichartig geschrieben und bedarf keinerlei Userbestätigung. Ja ne is klar.

Reg mich nicht weiter auf. Ich platze sonst.
 
Bist du zu unfähig zuzugeben das du nicht im Recht bist?
Die Antwort war inhaltlich möglichst genau an den wenigen Informationen welche in deinem ersten Beitrag enthalten waren.

Hier ist der Punkt erreicht wo ich dich wirklich gerne als .. beleidigen würde
Was soll der Kindergarten? Wer nicht in der Lage ist eine sachliche Diskussion zu führen hat in einem Forum nichts zu suchen. Die Qualität deiner Beiträge hier zeigt auf ganzer Linie von einem kindischen Benehmen dass es nicht fassbar ist.
In Anbetracht von §185 StGB ist es übrigens löblich dass du es wenigstens nicht ausgesprochen hast.

Jeder Import ist gleichartig geschrieben und bedarf keinerlei Userbestätigung.
Aus diesem Grund habe ich nicht eine sondern zwei Lösungen vorgeschlagen. Dass beide unpassend sind ist bedauerlich für deinen spezifischen Fall. Gerne kann ich eine auf deinen Fall passende Lösung für einen angemessenen Stundenlohn entwerfen und implementieren.

Ich platze sonst.
Im Rahmen dieses Beitrags: *pouf*?
 
Back
Top