Alternative zu FTP

Mime-Modifikation angezeigt

Die zweite Frage, um die sich auch ein großer Bereich von RFC 1867 kümmert, dreht sich darum, in welchem Format der Browser einen Formularinhalt, der auch Daten aus einer Datei enthält, an den Server übertragen soll.

Wenn der Server zur Entgegennahme des Datenstroms ein CGI-Programm (CGI = Common Gateway Interface) verwendet, muß es den Datenstrom anhand dieser Trenner auseinandernehmen. Innerhalb der Segmente sind die Daten der normalen Felder im Klartext lesbar enthalten. Eine gewisse Ausnahme stellen Segmente mit Dateiinhalten dar. Die Optik mit den diversen Sonderzeichen läßt schon vermuten, was "Multipart/Form-Data" gegenüber anderen Internet-Verfahren ungewöhnlich erscheinen läßt: Die Daten der Dateien werden tatsächlich roh binär in den Datenstrom einkodiert und nicht in Base64 oder UUEncode-Format.

Dies ist auch der Aspekt, der dieses Format für die Auswertung auf dem Server etwas unhandlich macht. So kann ein CGI-Programm die Daten einfach standardmäßig über den Eingabestrom stdin entgegennehmen, wenn man daran denkt, diesen auf Binärmodus umzuschalten. Man muß sich aber darauf verlassen, daß die von der Servervariable CONTENT_LENGTH gelieferte Größenangabe korrekt ist, da man wegen des binären Charakters der Daten nicht auf das EOF-Zeichen prüfen kann.

Weiterhin hat man die Unannehmlichkeit, daß die "normalen" Daten am einfachsten durch zeilenweises Lesen der Daten zu bekommen sind, andererseits aber die Binärdaten auf einen Rutsch gelesen werden müssen. Dann muß in den Binär-Daten noch nach der abschließenden Boundary gesucht werden, um dieses Segment korrekt als Binärdatei auf dem Server ablegen zu können. Diese Suche kann aber nicht über die String-Funktionen von C erfolgen, da diese durch die Null-Bytes in den Binärdaten ausgehebelt werden.

Übrigens stellen auch "Active Server Pages" (ASP) keinen Königweg dar, weil sie zwar mit Request.BinaryRead() den Datenstrom entgegennehmen, ihn aber wegen einer Typinkompatibilität nicht direkt verarbeiten können. Der Datenstrom ist letztlich ein Array von Bytes, den die ASPs aber gerne als Array von Variants interpretieren möchten. Diese Byte-Fummelei und das damit verbundene Debugging einer Serveranwendung ist ein unerquickliches Thema, weshalb das abgedruckte Listing wmupload.c sich damit begnügt, den Datenstrom exemplarisch entgegenzunehmen, in einer Zwischendatei abzulegen und die weitere Arbeit an eine ASP zu delegieren, denn sie ist einfacher zu handhaben.