Header, wenn perl-script javascript-code ausgibt?!?
Dirk
- perl
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
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
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.
*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
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.
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
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.
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.
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
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
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
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 :-)
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
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.
Hallo Christoph,
[...] Eine Javascript-Source sollte ja wohl nicht *.pl heißen.
Kannst du das auch begründen?
Grüße,
CK
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.
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.
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
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!
hallo,
application/x-javascript
ist der richtige Content-type
Erwin