Marc22: Wie erkennt der Browser das Ende einer HTTP-Response

Tja - Siehe Betreff.. Würde mich mal interessieren.

  1. 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

    --
    Was du heute kannst besorgen,
    das geht sicher auch noch morgen.
    1. 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?

      1. 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

        --
        Arzt:    Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.
        Patient: Sie meinen, Kniebeugen und so?
        Arzt:    Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet.
        1. 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..

          1. 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

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. 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..

              1. 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

              2. 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

                --
                Arzt:    Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.
                Patient: Sie meinen, Kniebeugen und so?
                Arzt:    Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet.
          2. 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

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. 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

    2. 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

      1. 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

        --
        Wenn zwei dasselbe tun, sind sie vielleicht bald zu dritt.
  2. 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