Michael Schröpl: HTTP-Request abbrechen

Beitrag lesen

Hi Sönke,

Falls Du Ausgaben meinst: Es hängt doch wohl vom
Skript/Programm ab, wann es etwas ausgibt.
Warum sollte es beispielsweise nicht als erstes
den Seitenkopf ausgeben, dann seine Berechnungen
durchführen, während dieser Berechnungen schon
Teilergebnisse ausgeben und am Ende nochmal den
Seitenfuß hinterherschicken. Dann wird während der
gesamten Laufzeit des Skriptes etwas ausgegeben.

weil im Seitenkopf etwas stehen kann, das erst als
Ergebnis der gesamten Berechnung entsteht.

Bei HTTP ist dies beispielsweise die Content-Length.
_Wenn_ Du eine solche senden willst (statt Dir über
"chunked" transfer encoding zu behelfen), dann _mußt_
Du das gesamte Paket aufsammeln, seine Länge berechnen
und _zuerst_ die HTTP-Header und _danach_ den Content
senden. Anders herum geht es nicht.

Insofern verstehe ich nicht, warum "das CGI meist
schon fertig" sein soll? Entsprechend obigem Ablauf
würde ich glatt das genaue Gegenteil behaupten.
Skripte geben eher nur in Ausnahmefällen einzig
kurz vorm Beenden etwas aus. Da müsste man ja
umständlicherweise sämtliche Ausgaben zwischendurch
sammeln - diese Mühe werden sich meiner Einschätzung
nach eher die wenigsten machen (sofern nicht schon
eine Puffer-Automatik eingebaut ist).

Das macht auch nicht das Skript, sondern der Webserver!
Der muß ja ohnehin nachsehen, ob er fehlende HTTP-
Header ergänzen muß oder was auch immer.

Noch ein Fall, wo zwischen Skript und Leitung gepuffert
wird: mod_gzip.
Das gzip-Verfahren eignet sich nicht dafür, streams zu
komprimieren - das kann nur Dateien verarbeiten.
Der Apache sammelt brav die Ausgabe eines CGI-Skripts,
einer SSI-Datei etc. auf und sendet diese nicht einfach
auf die Leitung, sondern macht daraus "chunks".
mod_gzip bekommt die ganze Ladung chunks auf den Tisch,
löscht die zusätzlichen chunk-Informationen wieder
heraus, wandelt das alles in ein einziges response-
Paket um und _jetzt_ wird der Inhalt komprimiert und
_danach_ ... nein, immer noch nicht auf die Leitung
geschrieben, sondern erst mal zurück in einen Apache-
Puffer (da könnten ja noch andere kommen, die ihren
Senf dazu geben müssen).

Ich kenne nur ein einziges Apache-Modul, das vorbei
an allen guten Sitten direkt auf die Leitung schreibt:
mod_ssl. Deshalb funktionieren mod_ssl und mod_gzip
auch nicht zusammen (jedenfalls nicht so, wie das bei
allen anderen Modul-Kombinationen geht, sondern in
diesem Fall nur von hinten durch die Brust ins Auge,
d. h. mit mod_proxy als 'Brücke').

Viele Grüße
      Michael