Wie erkennt der Browser das Ende einer HTTP-Response
Marc22
- php
0 Der Martin- https
0 Marc220 Edgar Ehritt
0 Edgar Ehritt
Tja - Siehe Betreff.. Würde mich mal interessieren.
Hallo,
Tja - Siehe Betreff.. Würde mich mal interessieren.
Wie erkennt der Browser das Ende einer HTTP-Response?
und warum fragst du danach im Themenbereich PHP?
Zurück zur Frage: Es gibt zwei Ansatzpunkte.
Erstens sollte ein HTTP-Client den Content-Length-Header auswerten.
Zweitens ist die Serverantwort in jedem Fall zu Ende, wenn der Server von sich aus die Verbindung beendet.
Genügt das als Info?
So long,
Martin
Zurück zur Frage: Es gibt zwei Ansatzpunkte.
Erstens sollte ein HTTP-Client den Content-Length-Header auswerten.
Zweitens ist die Serverantwort in jedem Fall zu Ende, wenn der Server von sich aus die Verbindung beendet.
Das mit dem Content-Header funktioniert nicht. Gibt es die Möglichkeit, die Verbindung manuell zu trennen, so dass der Browser denkt, die Seite wäre zu Ende geladen, aber das PHP-Skript wird noch weiter ausgeführt?
Hallo,
»» Erstens sollte ein HTTP-Client den Content-Length-Header auswerten.
»» Zweitens ist die Serverantwort in jedem Fall zu Ende, wenn der Server von sich aus die Verbindung beendet.
Das mit dem Content-Header funktioniert nicht.
wie meinst du das? Was heißt "funktioniert nicht"?
Gibt es die Möglichkeit, die Verbindung manuell zu trennen, so dass der Browser denkt, die Seite wäre zu Ende geladen, aber das PHP-Skript wird noch weiter ausgeführt?
Christian Seiler hat in einer vergleichbaren Situation mal vorgeschlagen, die Standard-Dateihandles STDIN, STDOUT und STDERR zu schließen. Dabei wird -logischerweise- auch die Verbindung zum Client getrennt. Ob das aber ohne Nebenwirkungen bleibt, weiß ich nicht.
So long,
Martin
wie meinst du das? Was heißt "funktioniert nicht"?
Die Ausgabe wird trotzdem fortgesetzt.
Christian Seiler hat in einer vergleichbaren Situation mal vorgeschlagen, die Standard-Dateihandles STDIN, STDOUT und STDERR zu schließen. Dabei wird -logischerweise- auch die Verbindung zum Client getrennt. Ob das aber ohne Nebenwirkungen bleibt, weiß ich nicht.
»»
Das hört sich ja eher experimentell an.. Nativ in PHP gibt es so etwas nicht, nehme ich mal an, oder?
Dürfte ja auch nicht, weil ja der Apache für die Ausgabe der Responses sorgt..
hi,
Das hört sich ja eher experimentell an.. Nativ in PHP gibt es so etwas nicht, nehme ich mal an, oder?
close(STDOUT); # gibts zumindest in Perl
Und wenn es in PHP eine Funktion gibt, die ein Handle öffnet, gibts da bestimmt auch eine Funktion zum Schließen des Handles.
Hotti
close(STDOUT); # gibts zumindest in Perl
Und wenn es in PHP eine Funktion gibt, die ein Handle öffnet, gibts da bestimmt auch eine Funktion zum Schließen des Handles.
Hm.. Unter php scheint so etwas nicht zu existieren..
Hallo,
»» close(STDOUT); # gibts zumindest in Perl
»»
»» Und wenn es in PHP eine Funktion gibt, die ein Handle öffnet, gibts da bestimmt auch eine Funktion zum Schließen des Handles.
»»
Hm.. Unter php scheint so etwas nicht zu existieren..
Vermutlich hast du gegooglet, das hier schon gefunden und das ist nicht das, was du suchst: http://www.php.net/manual/de/features.connection-handling.php ?
Gruß
jobo
Hallo,
»» close(STDOUT); # gibts zumindest in Perl
»» Und wenn es in PHP eine Funktion gibt, die ein Handle öffnet, gibts da bestimmt auch eine Funktion zum Schließen des Handles.
das will ich wohl meinen.
Hm.. Unter php scheint so etwas nicht zu existieren..
Was gefällt dir an fclose() nicht? - Das stand ja sogar schon in dem Archivbeitrag von Christian, den ich dir verlinkt hatte.
So long,
Martin
Hi,
wie meinst du das? Was heißt "funktioniert nicht"?
Die Ausgabe wird trotzdem fortgesetzt.
Wieso willst du die Verbindung beenden, wenn dein Script noch Ausgaben macht?
Oder, wieso willst du noch Ausgaben machen, wenn die Verbindung bereits beendet wurde?
Und: Warum beschreibst du dein Problem nicht endlich mal vernünftig und so vollständig, dass es auch für Aussenstehende nachvollziehbar wird?
Derzeit stammelst du nur einzelne Sätze, die im Kontext der Frage wenig Sinn ergeben.
MfG ChrisB
Gibt es die Möglichkeit, die Verbindung manuell zu trennen, so dass der Browser denkt, die Seite wäre zu Ende geladen, aber das PHP-Skript wird noch weiter ausgeführt?
Ja. Aller Wahrscheinlichkeit nach wirst Du sie in einer Webserverumgebung nicht nutzen können. Somit stellt sich vielmehr die Frage, was Du tatsächlich machen willst. Beschreibe bitte!
Gruß aus Berlin!
eddi
Hallo Martin,
Zweitens ist die Serverantwort in jedem Fall zu Ende, wenn der Server von sich aus die Verbindung beendet.
HTTP/1.1 schließt die Verbindung per Standard nicht. (siehe auch RFC 2616 14.1)
Gruß aus Berlin!
eddi
Hallo,
»» Zweitens ist die Serverantwort in jedem Fall zu Ende, wenn der Server von sich aus die Verbindung beendet.
HTTP/1.1 schließt die Verbindung per Standard nicht. (siehe auch RFC 2616 14.1)
das ist mir bekannt - aber der Server *kann* die Verbindung abbrechen, wenn er "will". Und dann ist die HTTP Response auf jeden Fall zu Ende.
Ich wollte damit nicht sagen, dass das der Regelfall wäre.
Ciao,
Martin
Hallo Marc22,
sehen wir uns das Beispiel unter stream_socket_client() doch einmal an:
$fp = stream_socket_client("tcp://www.example.com:80", $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
fwrite($fp, "GET http:www.example.com/ HTTP/1.0\r\n\r\n");
// ********** //
while (!feof($fp)) {
// ********** //
echo fgets($fp, 1024);
}
fclose($fp);
}
Hierbei wird deutlich, das für das Feststellen des Endes der Ressource die Funktion feof() verantwortlich ist.
Gruß aus Berlin!
eddi