PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit bash-cgi script :-(



Lin728
01-11-2004, 17:14
Grüssi!

Hab mir ein Mini-Bashscript geschrieben um einfach mal in die CGI-Programmierung mit der bash einzutauchen, hab ledier die allergrößten Probleme.
Eigentlich will ich das bash-script verwenden, um später java als CGI auf meinem Account zu starten.
Aber ich bekomm immer nur "500 - Internal Server Error"...


So siehts derzeit aus:


#!/bin/sh
echo "Content-type: text/html"
echo "<HTML><HEAD><TITLE>JavaStarter</TITLE></HEAD>"
echo "<BODY>"
echo "<FONT FACE='Arial,Helvetica'>"
echo "<center><h1>Supercomputer</h1></center><p>"
echo "</body>"
echo "</html>"


Der Support sagte mir nur, dass er beim Starten folgenden fehler bekam:


[Mon Nov 1 15:12:27 2004] [error] [client 213.203.250.13] malformed header from script. Bad header=<HTML><HEAD><TITLE>JavaStarter: /var/www/web460/html/cgi-bin/shell.cgi


Any ideas?


Danke schonmal im Vorraus

sticky bit
01-11-2004, 23:05
Versuch mal das:


#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<HTML><HEAD><TITLE>JavaStarter</TITLE></HEAD>"
echo "<BODY>"
echo "<FONT FACE='Arial,Helvetica'>"
echo "<center><h1>Supercomputer</h1></center><p>"
echo "</body>"
echo "</html>"

Und wenn das nicht hinhaut explitizt mit CRLF:


#!/bin/sh
echo -e -n "Content-type: text/html\r\n"
echo -e -n "\r\n"
echo "<HTML><HEAD><TITLE>JavaStarter</TITLE></HEAD>"
echo "<BODY>"
echo "<FONT FACE='Arial,Helvetica'>"
echo "<center><h1>Supercomputer</h1></center><p>"
echo "</body>"
echo "</html>"

Und wenn das immer noch nicht hinhaut musste vielleicht die Content-Length noch mit angeben (hoffentlich hab ich nicht verzählt, im Grunde muss da die Anzahl an Bytes in deinem Content, in dem Fall der HTML Code rein, Achtung auch die Newlines brauchen ein Byte (unter *nix zumindest bei Windows wärens zwei...)):


#!/bin/sh
echo -e -n "Content-type: text/html\r\n"
echo -e -n "Content-Length: 43\r\n"
echo -e -n "\r\n"
echo "<HTML><HEAD><TITLE>JavaStarter</TITLE></HEAD>"
echo "<BODY>"
echo "<FONT FACE='Arial,Helvetica'>"
echo "<center><h1>Supercomputer</h1></center><p>"
echo "</body>"
echo "</html>"

Begründung: Im HTTP haste in der Message nen Heder und nen Body Teil. Im Body sind die Daten im Header eben Header Informationen, der Header wird aber mit ner Leerzeile also nur ner Zeile mit CRLF (im HTTP ist das Newline Zeichen die Sequenz aus \0x0d und \0x0a oder eben \r und \n auch als Carriage Return (CR) und Line Feed (LF) bekannt) terminiert, am Ende müssen also zwei CRLFs stehen.
Die Content-Length ist für alle HTTP Nachrichten HTTP/1.0 und höher Pflicht die einen Body Teil haben (kann aber sein, dass das der Server selber hinzufügt wenn es um eine CGI Applikation geht)

Weiterführende Literatur:
http://www.ietf.org/rfc/rfc1945.txt
http://www.ietf.org/rfc/rfc2616.txt

Lin728
02-11-2004, 09:05
Also erstmal ein ganz großes Riesendanke für die ausführliche Antwort, einfach toll!
Das ist ja schon fast ein Tutorial ;-)

Du hatest recht, ein zweites 'echo " ";' hat das Sckript zum Arbeiten gebracht, ich hab mir schon fast sowas gedacht, weil er ja den Body auch noch zum Header "hinzugerechnet" hat.