Dirk: Header, wenn perl-script javascript-code ausgibt?!?

hallo,

ich binde mit
<script type="text/javascript" src="script.pl">
</script>
javascript in eine html-datei ein. soweit, so gut, nur...welchen Content-Type muß das perl-script korrekterweise ausgeben?
print "Content-Type: text/html\n\n"? oder
print "Content-Type: text/plain\n\n"? oder vielleicht doch
print "Content-Type: text/javascript\n\n"?

einige user berichteten mir, daß sie, wenn ich "Content-Type: text/plain\n\n" ausgebe, beim seitenaufruf einen dateidownload angeboten bekämen...in welchem natürlich der javascript-code steht. bei den anderen beiden "versionen" hat sich noch niemand beschwert.

vielen dank!

gruß,

Dirk

  1. Halihallo Dirk

    <script type="text/javascript" src="script.pl">

    ^^^^^^^^^^^^^^^

    print "Content-Type: text/javascript\n\n"?

    print "Content-Type: text/javascript\015\012\015\012";

    ist der korrekte Header für Javascript-Ressourcen und das hard-
    kodierte HTTP-Headerende ist CRLFCRLF <=> "\015\012\015\012" und
    _nicht_ "\n\n".

    einige user berichteten mir, daß sie, wenn ich "Content-Type: text/plain\n\n" ausgebe, beim seitenaufruf einen dateidownload angeboten bekämen...

    Typisch IE...

    Viele Grüsse

    Philipp

    1. morgens Philipp,

      <script type="text/javascript" src="script.pl">
                      ^^^^^^^^^^^^^^^

      *g* schön rausgepickt. Allerdings _kann_ das in einem HTML-Dokument funktionieren, obwohl es Unsinn ist. Eine Javascript-Source sollte ja wohl nicht *.pl heißen.

      einige user berichteten mir, daß sie, wenn ich "Content-Type: text/plain\n\n" ausgebe, beim seitenaufruf einen dateidownload angeboten bekämen...
      Typisch IE...

      Ich glaube, hier tust du dem IE Unrecht. Er hat ja Macken, aber hier liegt das Verständigungsproblem wohl noch nicht beim Browser, sondern in der Kommunikation zwischen Webserver und PERL-Interpreter oder aber in der Serverkonfiguration. Mein IE 6 kann zumindest im lokalen Netz durchaus mit "Content-Type: text/plain\n\n" etwas ausgeliefert bekommen, was er dann ordentlich darstellt und nicht downloaden möchte.

      Grüße aus Berlin

      Christoph S.

      1. *g* schön rausgepickt. Allerdings _kann_ das in einem HTML-Dokument funktionieren, obwohl es Unsinn ist. Eine Javascript-Source sollte ja wohl nicht *.pl heißen.

        wie soll ich sonst javascript-code _dynamisch_ in ein html-dokument kriegen?

        gruß, Dirk

        1. hi,

          wie soll ich sonst javascript-code _dynamisch_ in ein html-dokument kriegen?

          Mit dem Namen "code.js"  -  das ist jedenfalls gängige Praxis. Man kann daran herumtricksen, aber *.pl ist normalerweise für PERL reserviert.

          Zwar ist es letzten Endes wurscht, wie man eine externe Source benennt, aber der Server muß wissen, was er denn ausliefern soll. Dazu gibt es ein paar Gewohnheiten, und zu denen zählt, daß Javascript-Code in *.js-Dateien steht und PERL-Code in *.pl-Dateien.

          Grüße aus Berlin

          Christoph S.

          1. Mit dem Namen "code.js"  -  das ist jedenfalls gängige Praxis. Man kann daran herumtricksen, aber *.pl ist normalerweise für PERL reserviert.

            es _ist_ ja auch ein PERL-Script!

            Zwar ist es letzten Endes wurscht, wie man eine externe Source benennt, aber der Server muß wissen, was er denn ausliefern soll. Dazu gibt es ein paar Gewohnheiten, und zu denen zählt, daß Javascript-Code in *.js-Dateien steht und PERL-Code in *.pl-Dateien.

            der PERL-Code _steht_ ja auch in einer *.pl-datei...nur daß diese pl-datei, sowie sie aufgerufen und deren code ausgeführt wird, javascript-code ausgibt. also daran kann ich nun beim besten willen nichts "verwerfliches" finden.

            ich könnte zwar auch eine datei namens script.js in mein cgi-bin verzeichnis legen, deren code der perl-interpreter willenlos ausführen würde, und das src-attribut im script-tag auf diese js-datei referenzieren, das ergebnis wäre dasselbe...aber dann hätte ich ja wieder perl-code in einer js-datei :-) so gesehen, _kann_ ich deiner aussage nie gerecht werden.

            nun ja, lassen wir die haarspaltereien...phillip's antwort erscheint mir doch als die richtige.

            so long,

            Dirk

            1. hi,

              es _ist_ ja auch ein PERL-Script!

              Und warum steht dann <script type="text/javascript"> davor? eins von den beiden stimmt nicht. Punkt.
              ;-)

              nun ja, lassen wir die haarspaltereien...phillip's antwort erscheint mir doch als die richtige.

              Ja, weil er genau dasselbe bemängelt hat wie ich. Er hat bloß seine Häkchen unter dein <script type="textjavascript"> gesetzt, und ich habs unter die Angabe *.pl gesetzt. Der Widerspruch, den er meint, ist haargenau derselbe, den ich meine.

              Grüße aus Berlin

              Christoph S.

              1. Und warum steht dann <script type="text/javascript"> davor? eins von den beiden stimmt nicht. Punkt.
                ;-)

                doch, es stimmt! der mime-type des javascripts ist text/javascript...und die datei, die den javascript-code ausgibt, ein perl-script! ausrufezeichen! :-)

                Ja, weil er genau dasselbe bemängelt hat wie ich. Er hat bloß seine Häkchen unter dein <script type="textjavascript"> gesetzt, und ich habs unter die Angabe *.pl gesetzt. Der Widerspruch, den er meint, ist haargenau derselbe, den ich meine.

                nein! er meinte, daß, wenn ich im script-tag den mime-type "text/javascript" angebe, diesen auch serverseitig ausgeben muß. und nichts anderes.

              2. Hallo Christoph,

                es _ist_ ja auch ein PERL-Script!

                Und warum steht dann <script type="text/javascript"> davor? eins
                von den beiden stimmt nicht. Punkt.

                Deiner Argumentation nach dürfte ein Perl-Script auch kein HTML
                ausliefern.

                Ja, weil er genau dasselbe bemängelt hat wie ich.

                Nein.

                Grüße,
                 CK

                --
                Descartes sagte: 'Ich denke, also bin ich.' Ich hingegen sage: 'Ich denke nicht, also bin ich.'
              3. Halihallo Christoph

                Ich möchte heute Abend (heute morgen, sorry) ja nicht zu belehrend
                auftreten, aber ich muss dennoch nochmals meinen Standpunkt
                niederskripseln:

                es _ist_ ja auch ein PERL-Script!
                Und warum steht dann <script type="text/javascript"> davor? eins von den beiden stimmt nicht. Punkt.
                ;-)

                Nein. Beide stimmen. Sowohl "text/javascript", als auch der
                Uniform Resource Locator (URL).
                "text/javascript" bedeutet, dass es sich bei der (dem?) URL um
                eine Ressource mit Javascript-Code handelt und "script.pl" beschreibt
                die Stelle, an der sich die Ressource befindet (der Name ist absolut
                super-egal, es geht nur darum, dass der Webserver weiss, auf welche
                Ressource er zugreifen muss. Ob dies nun ein CGI-Script, eine Datei,
                oder ein Bier ist, ist absolut top-egal), wirklich, glaube mir :-)

                nun ja, lassen wir die haarspaltereien...phillip's antwort erscheint mir doch als die richtige.
                Ja, weil er genau dasselbe bemängelt hat wie ich. Er hat bloß seine Häkchen unter dein <script type="text/javascript"> gesetzt, und ich habs unter die Angabe *.pl gesetzt. Der Widerspruch, den er meint, ist haargenau derselbe, den ich meine.

                Es gibt nur zwei Sachen, die ich bemängle:
                 a) der korrekte HTTP-Header-Delimiter ist "\015\012" x 2 und nicht
                    "\n" x 2
                 b) die Unfähigkeit des IE den MIME-Typ zum Erkennen einer Ressource
                    heranzuziehen, statt der Dateiextension.

                <script type="text/javascript" src="./script.pl"></script>

                und print "Content-Type: text/javascript\015\012\015\012"; im Script,

                _ist_ richtig, völlig korrekt und genau nach Vorschrift.

                Die "Häcklein" unter dem MIME-Typen waren nicht zum Kennzeichnen
                eines Fehlers gedacht, sondern um den Fragesteller darauf aufmerksam
                zu machen, dass er sich die Antwort bereits selber gegeben hat
                (er scheint den MIME-Typen eben bereits zu kennen).

                Viele Grüsse

                Philipp

                1. Die "Häcklein" unter dem MIME-Typen waren nicht zum Kennzeichnen
                  eines Fehlers gedacht, sondern um den Fragesteller darauf aufmerksam
                  zu machen, dass er sich die Antwort bereits selber gegeben hat
                  (er scheint den MIME-Typen eben bereits zu kennen).

                  und der fragesteller hat's auch sogleich gerafft :-) hätte nicht gedacht, mit einer solch vergleichsweise "einfachen" frage so eine diskussion loszutreten...und das um diese uhrzeit.

                  a propos...

                  und print "Content-Type: text/javascript\015\012\015\012";

                  auch mit den newslinezeichen geb ich dir recht. wenn ich aber nun dieses perl-script im IE _direkt_ aufrufe, also den pfad direkt in die adresszeile reintippsele, bietet er mir auch die datei zum download an...mit einer hochgeladenen js-datei macht er allerdings dasselbe. in die html-datei eingebunden, funzt es aber einwandfrei.

                  und ich _MUSS_ nun ins bett, hab meiner frau noch ein kind versprochen :-D

                  gruß,

                  Dirk

                  1. Halihallo Dirk

                    Die "Häcklein" unter dem MIME-Typen waren nicht zum Kennzeichnen
                    eines Fehlers gedacht, sondern um den Fragesteller darauf aufmerksam
                    zu machen, dass er sich die Antwort bereits selber gegeben hat
                    (er scheint den MIME-Typen eben bereits zu kennen).
                    und der fragesteller hat's auch sogleich gerafft :-) hätte nicht gedacht, mit einer solch vergleichsweise "einfachen" frage so eine diskussion loszutreten...und das um diese uhrzeit.

                    Das gute alte Nachtleben hierzulande in diesem Forum :-)

                    und print "Content-Type: text/javascript\015\012\015\012";
                    auch mit den newslinezeichen geb ich dir recht. wenn ich aber nun dieses perl-script im IE _direkt_ aufrufe, also den pfad direkt in die adresszeile reintippsele, bietet er mir auch die datei zum download an...mit einer hochgeladenen js-datei macht er allerdings dasselbe. in die html-datei eingebunden, funzt es aber einwandfrei.

                    Ich habe auch nie behauptet, dass dies die Ursache ist. Aber anders
                    ist es dennoch nicht richtig, auch wenn es funktioniert.

                    Was mich jedoch brennend interessiert:
                    Haut bei dir der Trick mit dem Newline am _Ende_ der Ausgabe
                    funktioniert? - Also einfach ein

                    print "\n";

                    ganz am Schluss des Programmes hinschreiben. Wird die Datei dann
                    immer noch zum Download angeboten? - Bei mir "hilft" dieses
                    Abschliessende Newline; wie siehts bei dir aus.

                    Viele Grüsse

                    Philipp

                    @Henryk: HTTP, selbstverständlich, Danke :-)

      2. Halihallo Christoph

        *g* schön rausgepickt. Allerdings _kann_ das in einem HTML-Dokument funktionieren, obwohl es Unsinn ist. Eine Javascript-Source sollte ja wohl nicht *.pl heißen.

        Warum nicht? - Der Inhalt wird durch den MIME-Typen definiert, nicht
        durch die Dateiextension. _Das_ ist eben genau das Problem beim
        IE. Um genau zu sein: Im Internet _gibt es keine Dateiextensionen_,
        es gibt auch keine Dateien. Es gibt nur Ressourcen und deren Inhalt
        wird über den MIME-Typen definiert.

        Ich glaube, hier tust du dem IE Unrecht. Er hat ja Macken, aber hier liegt das Verständigungsproblem wohl noch nicht beim Browser, sondern in der Kommunikation zwischen Webserver und PERL-Interpreter oder aber in der Serverkonfiguration. Mein IE 6 kann zumindest im lokalen Netz durchaus mit "Content-Type: text/plain\n\n" etwas ausgeliefert bekommen, was er dann ordentlich darstellt und nicht downloaden möchte.

        Tja, bei mir funktioniert auf allen anderen Browsern alles wunderbar,
        nur der IE gibt dies einmal zum Download frei und das andere mal
        nicht. Ich habe es soeben kurz getestet:
        Falls nach der letzten Zeile ein Zeilenumbruch kommt, wird normal
        ausgeliefert, falls jedoch kein Zeilenumbruch kommt, wird die Datei
        zum Download angeboten... Natürlich lässt dies noch nicht den
        Schluss zu, dass der IE der Übeltäter ist, aber der Verdacht ist
        nunmal sehr, sehr berechtigt.

        #!/usr/bin/perl
        print "Content-Type: text/plain\015\012\015\012";
        print "text\n<h1> hello world </h1>";

        => Download

        #!/usr/bin/perl
        print "Content-Type: text/plain\015\012\015\012";
        print "text\n<h1> hello world </h1>\n";

        => normal angezeigt

        Getestet: IE 6.0.2600, WinXP, Apache/2.0.48 (Win32)

        und ja, es gibt den MIME-Typen "text/javascript".

        Viele Grüsse

        Philipp

        1. Moin,

          Um genau zu sein: Im Internet _gibt es keine Dateiextensionen_,
          es gibt auch keine Dateien. Es gibt nur Ressourcen und deren Inhalt
          wird über den MIME-Typen definiert.

          Nitpick: Ersetze Internet durch HTTP (und Inhalt durch Typ, wo wir schon dabei sind), dann volle Zustimmung. Unter anderem das haben die Microsoftentwickler nicht verstanden und - obwohl RFC 2616 es ausdrücklich nicht erlaubt - einen Ratealgorithmus für den Mime-Type eingebaut dessen Ergebnis bestenfalls zufällig dem gesendeten Content-Type entspricht. Das hat dein Experiment ja auch gezeigt.

          --
          Henryk Plötz
          Grüße aus Berlin
          ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
          ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
      3. Hallo Christoph,

        [...] Eine Javascript-Source sollte ja wohl nicht *.pl heißen.

        Kannst du das auch begründen?

        Grüße,
         CK

        --
        Nur die Weisesten und die Dümmsten können sich nicht ändern.
        1. morgens CK,

          [...] Eine Javascript-Source sollte ja wohl nicht *.pl heißen.
          Kannst du das auch begründen?

          Hab ich weiter unten ansatzweise bereits gemacht. Wenn sich Webserver, Perl-Interpreter und Browser richtig verstehen, ist es wurscht, was für eine "Endung" man verwendet, man kann ein script auch "script.honolulu" nennen. Es gibt aber ein paar häufig anzutreffende Gewohnheiten (die nix mit irgendeinem "Standard" zu tun haben), auf die sich auszuweichen lohnt, wenn gerade solche Fragen auftauchen. Sobald alles funktioniert, können die Scripts beliebige Namen erhalten.

          Grüße aus Berlin

          Christoph S.

  2. morgems,

    welchen Content-Type muß das perl-script korrekterweise ausgeben?

    Content-Type hat damit, ob deine HTML-Datei nun Javascript enthalten soll oder nicht, gar nichts zu tun (so weit ich weiß).

    oder vielleicht doch
    print "Content-Type: text/javascript\n\n"?

    Mir ist nicht bekannt, daß es so einen Content-Type überhaupt gibt.

    einige user berichteten mir, daß sie, wenn ich "Content-Type: text/plain\n\n" ausgebe, beim seitenaufruf einen dateidownload angeboten bekämen...in welchem natürlich der javascript-code steht. bei den anderen beiden "versionen" hat sich noch niemand beschwert.

    Sollte es nicht die eine oder andere Dokumentation geben (zum Beipsiel SELFHTML), in der man etwas über "Content-Type" nachlesen kann?

    Grüße aus Berlin

    Christoph S.

    1. morgems,

      hallo,

      Content-Type hat damit, ob deine HTML-Datei nun Javascript enthalten soll oder nicht, gar nichts zu tun (so weit ich weiß).

      das script gibt ja auch keinen html-code aus, sondern javascript-code.

      Sollte es nicht die eine oder andere Dokumentation geben (zum Beipsiel SELFHTML), in der man etwas über "Content-Type" nachlesen kann?

      jepp...hab's unter http://selfhtml.teamone.de/diverses/mimetypen.htm gefunden 8-)

      Grüße aus Berlin

      gruß aus'm saarland

      Dirk

    2. hi!

      Kannst du die "Ich weiß nicht, wovon ich rede, aber ich glaube du
      hast unrecht"-Postings bitte in Zukunft unterlassen? Wir wären dir
      sehr verbunden. Danke.

      bye, Frank!

      --
      Never argue with an idiot. He will lower you to his level and then
      beat you with experience.
  3. hallo,

    application/x-javascript

    ist der richtige Content-type

    Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?