ritschmanhard: auch Perl, Javascript; dyn. Bilddownload schlägt fehl (FF Linux)

Beitrag lesen

Hi Siechfred!

Erstmal vielen, vielen Dank für's lesen.

Ich mag deine alten Threads nicht ausgraben, aber: Grund Gütiger, was hast du vor?!

*GGG*

Bevor ich jetzt die Fragen beantworte, vielleicht nochmal ein Erklärungsversuch mit Beispiel:

Auf dem Server liegt ein System, welches Daten erfasst. Mittels einer Eingabemaske (Formular) kann der Anwender nun z.B. eine Statistik für einen bestimmten Zeitraum erstellen lassen, welche als Grafik dargestellt wird.
Also ist der (bespielhafte, sehr vereinfachte) Aufbau des Clients:
(...)
<body>
<form name="anforderung" id="anforderung" target="imgFrame">
  <p>beginn der Auswertung <input name="start" type="text" value=""/></p>
  <p>ende der Auswertung <input name="end" type="text" value=""/></p>
  <input type="submit" value="submit"/>
</form>
<iframe name="imgFrame">
</iframe>
</body>
(...)

im CGI:
(...)
my $startVar = param('start');
my $endVar = param('end');

if (!defined $startVar || !defined $endVar)
{
   warn "Zefix, keine Params!";
   my $myCGI=new CGI;
   print $myCGI->header(-status=>'204 No response');
   exit(0);
}
my $pngContent = /usr/local/bin/genStat -start=$startVar -end=$endVar;

binmode stdout;
print "Content-Type: image/png\n\n"
print $pngContent;
exit(0);

Jetzt die Antworten:

Was passiert, wenn du das Bild ganz normal einbindest, also via <img src="/cgi-bin/command.cgi">?

Im Client: Nix
Im Server: es wird ins Error Log geschrieben: "Zefix, keine Params!"

Ist dann das Verhalten wie gewünscht?

Für diesen Aufruf schon, da ein unparametrisierter Aufruf keinen Sinn macht.

Existiert dein Problem nur im lokalen oder auch im WWW-Kontext?

Immer, wobei es nur einen localhost und einen Intranet Zugriff gibt.

Wo gibst du diese Parameter mit?

In dem dafür vorgesehenen Formular (siehe Beispiel).

Dieses PNG wurde nicht serverseitig gespeichert und weist folgende Attribute auf:
alt="http://localhost/cgi-bin/command.cgi"
src="http://localhost/cgi-bin/command.cgi"

Auch hier die Frage: Woher kommen die Parameter?

Keine Ahnung - ich gebe nur aus dem CGI wie oben beschrieben ein Bild zurück...

Das PNG wird nun in einen IFRAME zurückgeschrieben (ist sichtbar)
Wie das? Perl kennt kein IFRAME, nur einen anfragenden Client.

Ja, hatte ich halt schonmal beschrieben & dachte ich könnte es wegen vereinfachung weglassen, jetzt: siehe Beispiel (target="igmFrame").

versuche ich, das Bild oder den Frame zu speichern, dann wird keine Datei erzeugt (Bild/Frame speichern unter).
Allerdings wird mir der PNG Code (binär im FF Viewer) gezeigt, wenn ich  "Frame Quelltext Anzeigen" wähle - da dies aber kein binär-Editor ist, kann man aus ihm kein gültiges PNG speichern.
Klingt irgendwie nach einem MIME-Problem.

Ja? O, bitte, lass es eines sein... wie könnte ich dann den MIME type ändern, dass das Bild sich speichern lässt?

  1. Nun habe ich unter about:config versucht, mittels view_source.editor.path & view_source.editor.external den khexedit als Betrachter/Editor anzugeben. Dies geht auch, aber das erhaltene Binary wird (anscheinend) vom FF vorverarbeitet, so dass z.B. ein vorkommendes \0d\0a zu \0a umformatiert wird. => kein PNG :(

Könnte es sein, dass FF Plaintext aus deinen Binärdaten macht?

Vermutlich - kann man das umgehen?

  1. Ich habe mit das Addon ViewSourceWith geholt (und erneut khexedit als default editor eingetragen). Nun kommt das Gemeine: Wenn das Bild auf der Hauptseite liegt, so kann man mittels "Quelltext anzeigen mit" den PNG Code GÜLTIG mit khexedit ansehen/speichern.

Und es kommt eine gültige PNG-Grafik raus?

Wenn ich den Code in khexedit als png speichere und öffne: Ja.

ABER: im IFRAME, wenn man versucht, dies zu tun, wird eine erneute (unparametrisierte) Anfrage an command.cgi gesendet; diese Anfrage beantwortet das CGI mit "204 No response"
*Wie* bekommst du die Grafik in das IFRAME?

Siehe Beispiel (target="igmFrame")

Vielleicht hat ja einer von Euch noch ne Idee, wie ich diese !?*##x Bilder gespeichert bekomm.

Bestimmt, wenn man (ich) dein Konzept verstünde. Wie wäre es mal mit einem unverfänglichen Onlinebeispiel.

Leider kann ich den Server selbst nicht nach außen öffnen. Das Beispiel habe ich versucht zu geben.

Ach ja, tritt das Problem nur in der von dir genannten Testumgebung auf, oder auch mit anderen Browsern unter anderen Systemen?

Ob das Problem mit anderen Server-Konfigurationen auftritt, weiß ich nicht, aber das kann ich eh nicht ändern: es bleibt bei SuSe 9.3 und Apache - die apache Konfig darf ich zwar ändern, aber ich wüßte nicht, was ich dort machen sollte.
Bezüglich anderer Clients (auch im anderen Thread schon erwähnt): Unter Linux tritt das Problem mit FF 1.0 -2.x auf, mit Netscape 7.2 ebenfalls - andere Browser werden nicht unterstützt (ist ein Intranet Projekt, nicht fürs WWW).
Unter Windows (2k, XP) tritt der Fehler _nicht_ auf für FF 1.0-2.x, Netscape 7.1 und IE 6

vergleiche auch meine Posts: http://forum.de.selfhtml.org/archiv/2007/7/t157207/#m1022611
und
http://forum.de.selfhtml.org/archiv/2007/7/t157282/#m1023086

Danke und Grüsse,

Richard