kaepten: Vorhandene HTML Datei anzeigen

Vielleicht sehe ich vor lauter Bäumen den Wald nicht mehr, aber ich frage mich, wie kann ich aus einem Perl-Script auf dem Client-Browser eine HTML Seite anzeigen lassen?

Es ist mir klar, wie ich neue Seite generieren könnte:

print "Content-type: text/html\n\n";
... etc. etc.

Aber wie sende ich eine auf dem Server existierende HTML Datei zum Browser?

  1. Vielleicht sehe ich vor lauter Bäumen den Wald nicht mehr, aber ich frage mich, wie kann ich aus einem Perl-Script auf dem Client-Browser eine HTML Seite anzeigen lassen?

    Wo willst Du denn das Perl-Skript ausführen lassen? Doch wohl auf dem Server-Rechner, nicht wahr? "Auf dem Browser" wirst Du kein Perl-Skript ausführen können - ein Browser ist kein Rechner.

    Aber wie sende ich eine auf dem Server existierende HTML Datei zum Browser?

    Mußt Du gar nicht.
    Das Perl-Skript mußt Du dann ohnehin via CGI ausführen lassen, und das Senden des Ergebnisses nimmt Dir dann der Webserver ab, den Du schließlich via http darum gebeten hast ...

    Falls Du oben statt "auf dem Browser" gemeint haben solltest "auf dem Client", ändert das nichts an meiner Antwort: Dann brauchst Du halt einen Webserver auf Deinem "Client"-Rechner (der kann ja simultan Client und Server sein, wenn Du den Webserver über "localhost" ansprichst).

    1. Vielen Dank für die Antwort!

      Das Perl-Skript mußt Du dann ohnehin via CGI ausführen lassen, und das Senden des Ergebnisses nimmt Dir dann der Webserver ab, den Du schließlich via http darum gebeten hast ...

      Genau das ist meine Frage, wie veranlasse ich den Webserver, dass er mir eine HMTL Datei zurückschickt?

      Sorry, hab mich ein wenig unklar ausgedrückt.

      Ich starte irgend eine irgenein.pl auf dem Server, dieses Script macht mir irgendwelche Aktionen und als Abschluss der Aktionen soll dem Browser, der das Script gestartet hat, eine HTML Datei gesendet werden.

      Wie lauten die Perl-Befehlszeilen für das Senden einer kompletten HTML-Datei??

      1. Genau das ist meine Frage, wie veranlasse ich den Webserver, dass er mir eine HMTL Datei zurückschickt?

        Ganz so funktioniert es nicht. Du forderst via http ja nicht eine Datei eines bestimmten *Typs* an. Der Browser fordert vielmehr eine *URL* an und erhält ein Paket, bestehend aus

        • einem http-Header mit der Formatbeschreibung des  Dokuments (z. B. "Content-type: text/html\n\n") und
        • dem Dokument selbst.
          Der Browser muß damit fertig werden - er müßte auch mit einem anderen Format (beispielsweise text/plain) fertig werden. Was der Server anbieten kann, ist seine Sache - und nicht die des Browsers.

        An dieser Stelle könnte man höchstens einen Exkurs zum Thema "Content negotiation" starten - da habe ich einen Artikel für SELFAKTUELL in der Schublade ...

        Ich starte irgend eine irgenein.pl auf dem Server, dieses Script macht mir irgendwelche Aktionen und als Abschluss der Aktionen soll dem Browser, der das Script gestartet hat, eine HTML Datei gesendet werden.

        Auch hier wieder: Die Reihenfolge der Initiativen ist eine andere. Nicht "Du" startest das Perl-Skript, sondern der Webserver tut es, *nachdem* Du eine URL angefordert hast und der Webserver schon weiß, wohin er das von ihm aufgesammelte "stdout" weiterschicken muß.

        Dein Browser kommuniziert mit dem http-Protokoll - auf der anderen Seite muß ein Partner vorhanden sein, der dasselbe Protokoll behandelt.
        Du kannst Dir natürlich ein Perl-Skript schreiben, welches sich im Wesentlichen wie ein Webserver verhält (ich würde allerdings davon abraten, obwohl es wohl vordefinierte Perl-Objekte für so etwas gibt), aber um die Kommunikationsschiene mußt Du Dich dann auch noch kümmern (also Deiner TCP/IP-Konfiguration klar machen, daß bei einem Anruf auf Port XY Dein Perl-Programm gestartet werden soll usw.).

        Wie lauten die Perl-Befehlszeilen für das Senden einer kompletten HTML-Datei??

        Die Frage läßt sich m. E. so gar nicht beantworten, zumal es in Perl beliebig viele Methoden gibt, HTML-tags zu generieren (eigene Objektklassen usw.).
        Im Wesentlichen gibst Du einfach den Inhalt des Dokuments mit "print" nach stdout aus.
        Davor muß lediglich noch der http-Header gesendet werden; dieser besteht aus der oben erwähnten Zeile "Content-type: text/html" und einer nachfolgenden Leerzeile.

        Ich kann Deinen Fragen nicht so recht entnehmen, wieviele Grundlagen Du bereits beherrschst ...

        1. Danke für die ausführlichen Hintergrundinfos!

          Also wenn ich das richtig interpretiere, würde also mein Wunsch dadurch realisiert werden, indem ich via Perl die auf dem Server vorhandene HMTL Datei öffne und Zeile für Zeile via "print" dem Client (Browser) schicke.

          -HMTL-File öffnen
          Bis File-Ende
            -Zeile lesen
            -Zeile an stdout mit "print"
            -nächste HTML Zeile
          -HTML-File schliessen

          Vielen Dank für Deine Bemühungen!

          PS: Dann würde ich aber eine Trick-variante sehen. Ich sende nicht die gwünschte HTML Datei sondern eine "Pseudo-Datei" generieren:

          print "Content-type: text/html\n\n";
             print "<html>\n";
             print "<head>\n";
             print "<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=http://www.meinserver.ch/gewünschteHMTLSeite.htm">\n";
             print "</head>\n";
             print "<body>\n";
             print "</body>\n";
             print "</html>\n";

          1. Also wenn ich das richtig interpretiere, würde also mein Wunsch dadurch realisiert werden, indem ich via Perl die auf dem Server vorhandene HMTL Datei öffne und Zeile für Zeile via "print" dem Client (Browser) schicke.

            Klar, aber warum läßt Du das den Webserver nicht einfach selber machen? Dazu ist er da ...

            -HMTL-File öffnen
            Bis File-Ende
              -Zeile lesen
              -Zeile an stdout mit "print"
              -nächste HTML Zeile
            -HTML-File schliessen

            Das Einlesen der kompletten Datei geht auch in einem Befehl, ohne Schleife; das Ausgeben wahrscheinlich ebenfalls. (Mit Syntax bin ich nicht so doll ...)

            PS: Dann würde ich aber eine Trick-variante sehen. Ich sende nicht die gwünschte HTML Datei sondern eine "Pseudo-Datei" generieren:
               print "Content-type: text/html\n\n";
               print "<html>\n";
               print "<head>\n";
               print "<META HTTP-EQUIV="REFRESH" CONTENT="0;URL=http://www.meinserver.ch/gewünschteHMTLSeite.htm">\n";

            ... dann passiert genau dasselbe, als wenn Du diesen Code statisch als x.html abspeichern und über die entsprechende URL anfordern würdest.
            Wo ist da der "Trick"?

            1. ... dann passiert genau dasselbe, als wenn Du diesen Code statisch als x.html abspeichern und über die entsprechende URL anfordern würdest.
              Wo ist da der "Trick"?

              Kein Trick, aber die einzige Lösung für mein "Problem".

              Ich muss das Script starten, es speichert diverse Formularangaben des Aufrufenden HTML-Dokument in einer Datei auf dem Server. Nun werden also via Submit-Button die Formulardaten gesendet. Dann passiert ja nichts mehr in meinem Browser-Fenster, auf dem Server jedoch spuhlt mein Script. Nun soll eben nicht einfach nichts mehr passieren im Browser-Fenster, sondern es soll eine neue Seite geladen werden, eine sog. Bestätigungsseite! Wie ich es anfangs geschrieben habe, ist mir bekannt, wie man solche Seiten dynamisch mit "print" erstellt, ich dachte aber, dass es ev. irgend eine Weise gibt, eine bereits vorhandene Seite "als Ganzes" als Antwort zurück zum Client zu schicken. So im Stile:

              PerlSendFileToClient(dateiXY);

              Der Gedanke dabei war, dass eben nicht eine solch einfache "danke schön" Seite kommt, sondern der Surfer auf eine Seite der Homepage weitergeleitet wird.

              TYVM
              cheers
              kaepten

              1. ich dachte aber, dass es ev. irgend eine Weise gibt, eine bereits vorhandene Seite "als Ganzes" als Antwort zurück zum Client zu schicken. So im Stile:
                PerlSendFileToClient(dateiXY);

                Ach so!
                Nein, nicht in Perl, aber - noch geschickter - im http-Header.

                Such mal im Archiv nach "Location" ... das gibt viele Treffer, ich habe mal <../../sfarchiv/1999_1/t02441.htm#a11440> herausgepickt, der behandelt das Thema auch.

                1. Such mal im Archiv nach "Location" ... das gibt viele Treffer, ich habe mal <../../sfarchiv/1999_1/t02441.htm#a11440> herausgepickt, der behandelt das Thema auch.

                  Jetzt ist einiges klar! Vielen Dank für Deine Bemühungen, hast mir sehr geholfen!

                  cheers
                  kaepten

                  1. Such mal im Archiv nach "Location" ... das gibt

                    Ganz einfach:

                    print "Content-Type: text/html\n\n";
                    print "Location: http://www.dein-url.de/seite-nach-formular.html\r\n\r\n";

                    Ciao
                      K@rl

                    PS: ich weiß - 's gemein mit der großen Grafik ;-)

  2. Vielleicht sehe ich vor lauter Bäumen den Wald nicht mehr, aber ich frage mich, wie kann ich aus einem Perl-Script auf dem Client-Browser eine HTML Seite anzeigen lassen?

    Es ist mir klar, wie ich neue Seite generieren könnte:

    print "Content-type: text/html\n\n";
    ... etc. etc.

    Aber wie sende ich eine auf dem Server existierende HTML Datei zum Browser?

    Hi kaepten,

    schau mal da: <../../sfarchiv/1999_2/t03761.htm#a18138>

    Viele Grüße, Rolf

    1. schau mal da: <../../sfarchiv/1999_2/t03761.htm#a18138>

      Ganau sowas habe ich im Archiv eigentlich gesucht, aber ich wusste nicht welche Begriffe ich zur Suche eingeben sollte und habe daher nichts brauchbares gefunden. Und alles "von Hand" zu durchsuchen wird langsam aber sicher immer aufwendiger.

      Vielen Dank!
      cheers
      kaepten

      1. schau mal da: <../../sfarchiv/1999_2/t03761.htm#a18138>

        Ganau sowas habe ich im Archiv eigentlich gesucht, aber ich wusste nicht welche Begriffe ich zur Suche eingeben sollte und habe daher nichts brauchbares gefunden. Und alles "von Hand" zu durchsuchen wird langsam aber sicher immer aufwendiger.

        Vielen Dank!
        cheers
        kaepten

        Hallo, danke fürs FeedBack, hier sind noch 2 schöne Links:

        zu CGI.PM
        http://www.oreilly.de/catalog/perlmodger/manpage/cgi.htm

        und zu "print location"
        http://www.jmarshall.com/easy/cgi/german/

        Weils heut sonny schöner Tag war ;-)

        Viele Grüße, Rolf