lesen – Webanwendung zum Veröffentlichen von Literatur

Andreas K. Förster

Hauptseite: https://akfoerster.de/lesen/index.xhtml

Projektseite: https://akfoerster.de/p/lesen/

Der Autor würde sich sehr über Rückmeldungen freuen. <mailto:akf@akfoerster.de>

Inhaltsverzeichnis

Überblick

Dieses Programm ist ein Service zum Bereitstellen von Büchern über Netzwerke. Als Betrachter wird ein normaler Webbrowser mit Unterstützung für XHTML benötigt. Es können aber auch spezialisierte Betrachter dafür entwickelt werden.

Die Bücher können weltweit über das Internet zugänglich gemacht werden, oder in einem lokalen Netzwerk, aber auch einfach nur auf einem einzelnen Computer.

10. Installation

Das Programm ist in C geschrieben und sollte auf allen POSIX-kompatiblen Systemen kompilierbar sein. Für Windows kann man den Compiler Mingw-w64 verwenden.

Außer einem C-Compiler benötigt man entweder einen Webserver mit Unterstützung für CGI/1.1, oder ein TCP-Programm, wie „inetd“ oder „ucspi-tcp“ <http://cr.yp.to/ucspi-tcp.html>.

An die verwendbaren Webbrowser werden keine besonderen Anforderungen gestellt... Ja, es funktioniert auch mit Lynx! (Lediglich alte Versionen des Internet-Explorers machen Probleme.)


Zuerst kann man in der Datei „config.h“ einiges umkonfigurieren. Es gibt auch andere Beispieldateien, mit denen man die „config.h“ ersetzen kann.

Im Folgenden gehe ich von der Standard-Konfiguration aus.

11. Über einen Webserver als CGI

Um das Programm als CGI für einen Webserver zu kompilieren gibt man „make lesen.cgi“ ein. Die Verwendung eines Webservers ist auf jeden Fall besser, aber auch schwieriger, wenn man den nicht eh schon eingerichtet hat.

Das erstellte Programm „lesen.cgi“ kopiert man dann zB. als „lesen“ in das Verzeichnis „cgi-bin“ des Webservers. Das Verzeichnis für die Textdateien sollte als „/usr/local/share/lesen“ angelegt werden. Als Beispieltext kann man erstmal diese Datei da rein kopieren.

Die Datei „lesen.css“ sollte in das Wurzelverzeichnis des Webservers kopiert werden. Außerdem sollte dort eine Datei namens „kontakt.html“ existieren. Das kann natürlich auch ein symbolischer Link zum eigentlichen Impressum sein. (In Deutschland herrscht Impressumspflicht.)


Verlinken kann man das dann wie in folgendem Beispiel:

<a href="/cgi-bin/lesen/index.xhtml">Bücher</a>

Um ein bestimmtes Buch zu adressieren, gibt man vor dem index den Kurznamen an, wieder gefolgt von /index.xhtml, diesmal für das Inhaltsverzeichnis. Der Kurzname ist der Dateiname ohne die Erweiterung „.txt“.

<a href="/cgi-bin/lesen/2Planeten/index.xhtml">Auf zwei Planeten</a>

Um ein bestimmtes Kapitel abzurufen, gibt man statt index die Kapitelnummer an:

<a href="/cgi-bin/lesen/2Planeten/1.xhtml">Erstes Kapitel</a>

Man kann sogar einen bestimmten Absatz mit angeben:

<a href="/cgi-bin/lesen/2Planeten/1.xhtml#a81">Absatz 81</a>

12. Über „inetd“, „tcpserver“ oder Ähnliches

Wenn man keinen vollständigen Webserver installieren will, kann man das Programm auch als eigenständigen Server über „inetd“ oder „tcpserver“ oder Ähnliches laufen lassen.

Zunächst sollte man das Verzeichnis „/usr/local/share/lesen“ anlegen. In diesem Verzeichnis legt man später seine Texte und index-Dateien ab. Da kann man erstmal diese Anleitung rein packen. Dort legt man dann noch ein Unterverzeichnis „web“ an. In das Verzeichnis kopiert man die Datei „lesen.css“. Dieses Verzeichnis ist das Wurzelverzeichnis des internen Webservers. Es können dort zum Beispiel auch PDF-Dateien, oder Unterverzeichnisse für HTML-Webseiten, angelegt werden.

Da die Erweiterung „.txt“ bei diesem Programm eine besondere Bedeutung hat, sollten reine Textdateien, welche als solche angezeigt werden sollen, die Dateiendung „.text“ bekommen. Der Server überträgt die eingestellte Zeichenkodierung bei allen Textformaten; auch bei HTML-Dateien.

Um das Programm zu kompilieren, gibt man nun „make lesen-http“ ein.

Um es mit „tcpserver“ zu verwenden, kann man es als unpriviligierter Nutzer beispielsweise wie folgt aufrufen:

tcpserver localhost 8080 ./lesen-http /usr/local/share/lesen

Das kann dann über die Adresse <http://localhost:8080/index.xhtml> abgerufen werden. Durch die Angabe „localhost“ ist sichergestellt, dass das nur auf dem selben System abrufbar ist.


Um „inetd“ zu verwenden, installiert man das erzeugte Programm „lesen-http“ dann nach „/usr/local/bin“.

Nun muss man die Datei „/etc/inetd.conf“ anpassen, indem man folgende Zeile hinzufügt:

http stream tcp nowait nobody /usr/sbin/tcpd /usr/local/bin/lesen-http

* Am Ende der Zeile könnte man noch das Hauptverzeichnis und das Webverzeichnis hinzufügen. Dann braucht man das Programm nicht neu kompilieren, wenn man die ändern will.

* Wenn schon ein anderer Webserver installiert ist, kann man statt „http“ am Anfang eine noch freie Portnummer angeben.

Um inetd mitzuteilen, dass die Konfiguration geändert wurde, muss man ihm ein HUP-Signal senden: killall -HUP inetd.

So, nun müsste man es mit einem Webbrowser aufrufen können: <http://localhost>.

Man kann auch den Zugang einschränken, zum Beispiel auf das lokale Netzwerk. Genaueres findet man in der Manpage hosts access.

20. Aufbau der Textdateien

Textdateien sollten einen möglichst kurzen Dateinamen haben und auf „.txt“ enden. Anstelle von Leerzeichen sollte man im Dateinamen lieber einen Unterstrich (_) verwenden. Der Dateiname ohne die Endung wird Teil der Adresse.

Dateien, deren Namen mit „index“ beginnen, werden als Indexdateien interpretiert (siehe unten).

Die Datei muss in UTF-8 kodiert sein.

Die erste Zeile beginnt mit dem Namen des Autors, einem Doppelpunkt, evtl. Freiraumzeichen und dem Titel des Buches. Falls der Autor unbekannt ist, oder bleiben will, sollte in der Zeile entweder gar kein Doppelpunkt verwendet werden, oder sie sollte gleich mit einem Doppelpunkt beginnen. Einen Untertitel kann man durch zwei Schrägstriche abgrenzen.

Dann kann eine kurze Einleitung folgen, die durch die erste Kapitelzeile abgeschlossen wird.

Kapitelzeilen müssen eingerückt sein, dann kommt eine Kapitelnummer, gefolgt von einem Punkt, Freiraum und der Kapitelüberschrift. Falls das Buch keine Kapitelüberschriften hat, kann stattdessen durchgängig das Wort „Kapitel“ verwendet werden. Ein Vorwort muss die Kapitelnummer „0.“ tragen. Mehrere Vorworte sollten zu einem Kapitel zusammengefasst werden.

Kapitel werden durch die nächste Kapitelzeile oder dem Dateieinde abgeschlossen.

Absätze werden durch eine oder mehrere Leerzeilen dargestellt.

Eine Zeile, die nur Freiraum und Sterne (*) enthält, ist eine Trennzeile (<hr>).

Ausdrücke in geschweiften Klammern (Beispiel) werden betont (<em>). Anstatt geschweifter Klammern kann man auch die Steuerzeichen Shift Out (U+000E) und Shift In (U+000F) verwenden.

Ausdrücke in eckigen Klammern (Beispiel) werden ebenfalls unterschiedlich dargestellt (<i>). Deutsche Bücher, die in Fraktur gesetzt sind, setzen beispielsweise anderssprachige Ausdrücke in Antiqua. Die genaue Darstellung kann man in der Datei „lesen.css“ festlegen.

Ein einzelner Unterstrich ( ) wird durch ein geschütztes Leerzeichen ersetzt. Bei einem geschützten Leerzeichen wird ein Zeilenumbruch an der Stelle verhindert.

Falls man eines dieser Zeichen tatsächlich darstellen lassen will, muss man es doppelt angeben ({…}, […], _).

Verse werden durch zwei Schrägstriche getrennt.

Zicke zacke
Hühnerkacke

Zwei Schrägstriche erzwingen einen Zeilenumbruch, allerdings wird die Zeichenkombination „://“ intakt gelassen, da diese in URLs verwendet wird.

URIs werden automatisch erkannt für die Schemata http, https, ftp, ftps, file, mailto, gopher, shttp, sftp, ssh, tel, telnet und urn. Zur Abgrenzung zum umgebenden Text sind zB. Freiraum, spitze Klammern, oder Anführungsstriche geeignet (siehe RFC-3986, Anhang C). Die Adresse muss jedoch zusammenhängend, in einer einzigen Zeile stehen.

Runde Klammern kann man beispielsweise nicht verwenden, da diese Teil der URI sein könnten. Freiraum, oder Zeilenumbrüche innerhalb von URIs sind nicht zulässig.

Anwendungsbeispiel:
Der Autor ist per E-Mail erreichbar unter <mailto:Dichter@example.net>, oder telefonisch unter <tel:+49-234-9999999>.

Zeichen, die in XHTML besondere Bedeutung haben, werden korrekt umgewandelt und können somit bedenkenlos verwendet werden. Das bedeutet auch, dass (X)HTML-Code in Textdateien textuell dargestellt wird. Das ist unter Anderem auch eine Schutzmaßnahme.

30. Index-Dateien

Der Buch-Index wird erstmal voll automatisch erstellt. Allerdings sieht man dann nur die Kurznamen und hat kaum Kontrolle über die Reihenfolge.

Man kann jedoch im Verzeichnis mit den Textdateien eine Datei namens „index.txt“ erstellen. Diese Datei enthält linksbündig die Kurznamen der aufzulistenden Bücher, oder URLs. Danach kann, nach beliebig vielen Leer- oder Tabulator-Zeichen, der ausführliche Titel folgen. Der Titel kann aber auch einfach weggelassen werden, wenn der Name reicht.

Kurznamen, die mit „index“ beginnen, werden ebenfalls als Indexdateien behandelt. Auf diese Weise kann man Verzeichnisse in beliebig viele Kategorieen unterteilen.

Im Kurznamen muss man eventuell die URL-Kodierung für Sonderzeichen verwenden. Insbesondere müssen Leerzeichen im Dateinamen durch „%20“ ersetzt werden. Ob deutsche Umlaute kodiert werden müssen, hängt vom Dateisystem des Servers ab. Am besten, man verwendet für Dateinamen nur unkritische Zeichen. Unkritische Zeichen sind Buchstaben des Alphabets, Zahlen, Punkte, Minus-Zeichen, Unterstriche, und Tilden.

Wenn im Namen Schrägstriche und/oder Doppelpunkte vorkommen, wird das als URL interpretiert. Wenn die Dateien auf dem selben Server liegen, sollte man nur den Pfad, beginnend mit einem Schrägstrich, angeben.

Leerzeilen werden ignoriert. Zeilen, die mit einem Leerzeichen oder Tabulator anfangen, werden derzeit ebenfalls ignoriert, das könnte sich jedoch in zukünftigen Versionen ändern.

Bücher, die in Index-Dateien nicht erscheinen, werden auch nicht angezeigt. Man kann sie jedoch direkt aufrufen oder verlinken. Auf diese Weise kann man zum Beispiel Bücher erstmal versteckt halten, solange man noch daran arbeitet.

31. Umleitungsdateien

Manchmal möchte man auch den Kurznamen eines Buches ändern. Wenn man einfach nur die Datei umbenennt, sind aber alte Links kaputt. Seine eigenen Links kann man zwar ändern, man sollte aber auch bedenken, dass andere Leute sich schon Lesezeichen oder Links auf ein Buch angelegt haben könnten.

Man könnte zwar bei einigen Systemen mit symbolischen Links arbeiten, für Suchmaschinen oder gar Archive wäre das aber fatal, da von außen betrachtet der selbe Inhalt dann mehrfach vorhanden wäre.

Stattdessen kann man besser Umleitungsdateien anlegen. Dies sind Dateien mit dem Dateinamen der alten Datei. Diese Dateien enthalten dann aber nur eine Zeile, die mit einem „>“ anfängt, gefolgt von dem neuen Kurznamen. Vor und nach dem „>“ dürfen Leerzeichen stehen.

Solche Umleitungen kann man auch benutzen, um ein Buch unter mehreren Namen oder Schreibweisen verfügbar zu machen.

Diese Umleitungen funktionieren sowohl für das Inhaltsverzeichnis, als auch für die Kapitel und bei der Abfrage von Textdateien.

Obwohl es funktioniert, sollte man Umleitungen über mehrere Ecken jedoch vermeiden.

Die Umleitung erfolgt mittels HTTP-Code „301 Moved Permanently“. Die alte Adresse wird dadurch für ungültig erklärt, was zB. für Suchmaschinen relevant ist.

Will man deutlich machen, dass ein Buch dauerhaft nicht mehr verfügbar ist, kann man hinter dem „>“ einfach nichts angeben, oder die Datei gleich ganz leer machen. Das ergibt dann eine andere Fehlermeldung, als wenn die Datei gar nicht existiert. Das ist sowohl für Menschen zu unterscheiden, anhand der Fehlermeldung, als auch maschinell, anhand des HTTP-Codes. Für nicht mehr verfügbare Bücher wird der HTTP-Code „410 Gone“ ausgegeben, für überhaupt nicht vorhandene Bücher Code „404 Not Found“.

Wenn man ein Buch nur zeitweilig offline nehmen will, kann man stattdessen erstmal die Leserechte so einschränken, dass der Server die Datei nicht mehr lesen kann („403 Forbidden“).

Achtung: Code 410 und 301 verursachen in vielen Suchmaschinen eine sofortige Löschung, die Codes 403 und 404 erstmal nicht.

Wenn sich ein Buch noch in Zwischenspeichern befindet, entweder im Browser, oder in Proxies, werden diese Änderungen erst viel später sichtbar!

40. Text-Schnittstelle

Es gibt auch eine reine Text-Schnittstelle, mit der man spezialisierte Anwendungen entwickeln kann, zum Beispiel Thin-Clients. Wenn man bei der URL hinten „.txt“ anhängt, bekommt man reine Textdaten, ohne XHTML-Code.

Mit „…/index.txt“ erhält man die Buchübersicht; mit „…/buch.txt“ bekommt man den Text des gesamten Buches; mit „…/buch/index.txt“ nur das Inaltsverzeichnis; das Vorwort — falls vorhanden — mit „…/buch/0.txt“; das erste Kapitel dann mit „…/buch/1.txt“ und so weiter…

Im HTTP-Kopf wird bei den einzelnen Kapiteln ein zusätzlicher Eintrag mitgeschickt, mit Links zum Inhaltsverzeichnis, dem vorherigen und dem nächsten Kapitel (siehe RFC 5988). Dies kann für ein Navigationsmenü genutzt werden. Normale Webbrowser ignorieren diesen Eintrag.

Wenn man Daten als Text anfordert, werden auch eventuelle Fehlermeldungen als reiner Text gesendet. Neben dem HTTP-Statuscode erkennt man solche Fehlermeldungen auch daran, dass sie mit einem Stern (*) beginnen. Man sollte aber auch nicht die Möglichkeit vergessen, dass Fehlermeldungen evtl. nicht von diesem Programm, sondern vom Webserver generiert werden, und somit als (X)HTML-Code ausgeliefert werden. Es sollte aber reichen zu erkennen, dass das Ergebnis mit „<“ beginnt und dann mit einer allgemeinen Fehlermeldung zu reagieren.

Man kann beispielsweise das Werkzeug „curl“ verwenden. Dabei sollte man immer den Parameter „-L“ und eventuell „--compressed“ verwenden. Außerdem könnte „-f“ hilfreich sein.

50. Probleme und Fragen

Warum C? Sollten CGI-Skripte nicht in Skriptsprachen geschrieben werden?

Nein! Dass CGI-Skripte oftmals in Skriptsprachen geschrieben werden, ist gerade das Problem, wieso CGI den Ruf hat, so langsam zu sein. Da werden dann teilweise sogar Skriptsprachen in den Server integriert, um diesen Nachteil auszugleichen. Wenn man aber gleich kompilierte Programme benutzt, entsteht das ganze Problem erst gar nicht. Das ist unkompliziert und schnell.

Leider spricht der CGI-Standard immer von Skripten. Aber das Wort wird dort anders definiert. Das führt leider zu Verwirrungen.

Leider gibt es auch Webanbieter, die nur bestimmte Sprachen unterstützen.


Gibt es weitere Möglichkeiten der Optimierung?

Das CGI- und http-Programm wird immer wieder neu gestartet. Dadurch ist die Startzeit besonders wichtig. Die Startzeit kann deutlich verbessert werden, indem man die Programme statisch linkt.

Die GNU-libc ist allerdings nicht gut für statisches Linken geeignet. Ich selber verwende die dietlibc <http://www.fefe.de/dietlibc/>, und das Programm ist auch dafür optimiert.

Aber das ist nicht nötig. Auch wenn das Programm dynamisch gegen die GNU-libc gelinkt ist, ist es immer noch wesentlich effizienter, als beispielsweise ein Perl-Skript.


Was bedeutet die Meldung „es liegt ein Fehler auf dem Server vor“?

Das kann verschiedene Ursachen haben. Die wahrscheinlichste ist jedoch, dass das Verzeichnis für die Bücher nicht existiert, oder an der falschen Stelle liegt, oder der Server nicht die Rechte hat, in das Verzeichnis zu wechseln.


Wie kann ich die Bücher „entsperren“?

Die Meldung, dass ein Buch „gesperrt“ ist, bedeutet, dass der Server keine Leserechte auf das Buch hat. Es könnte auch ein Problem mit den Rechten der Verzeichnisse im Pfad vorliegen.


Bei HTML-Dateien wird die Meta-Angabe zur Zeichenkodierung ignoriert?

Das betrifft nur den integrierten Webserver von „lesen-http“. Ich gehe davon aus, dass man auf dem Server alles in der selben Kodierung haben möchte, sonst ist es noch fehleranfälliger. Die Kodierung wird bei vielen Dateiformaten schon innerhalb der http-Übertragung mitgeschickt. Das hat Vorrang vor einer Meta-Angabe.

Eine Meta-Angabe zusätzlich rein zu schreiben, kann jedoch sinnvoll sein, falls sich das jemand als Datei abspeichern will.


Welchen Sinn macht die Angabe der Sprache?

Die Angabe der Sprache hat keinerlei Einfluss auf die Anzeige in einem normalen Webbrowser. Aber sie macht zum Beispiel Sinn für Suchmaschinen, online-Übersetzer, oder für die Aussprache von Sprachsynthesizern.


Was für Bücher darf man veröffentlichen?

In Deutschland muss man das Urheberrecht beachten <http://www.gesetze-im-internet.de/urhg/>.

In § 64 steht: „Das Urheberrecht erlischt siebzig Jahre nach dem Tode des Urhebers.“ Das bedeutet, ältere Texte dürfen frei veröffentlicht werden. Falls es sich um eine Übersetzung handelt, gilt aber auch der Übersetzer als Urheber.

In anderen Ländern gibt es ähnliche Gesetze, die sich jedoch in Details unterscheiden können. Das Herkunftsland des Buches spielt nach deutschem Recht jedoch keine Rolle.

Manche Bücher werden aber auch unter Lizenzen gestellt, die eine Veröffentlichung unter bestimmten Bedingungen erlauben; zum Beispiel Creative Commons Lizenzen.

Falls ihr selber Bücher schreibt, dürft ihr die selbstverständlich veröffentlichen (das heißt, wenn ihr die Verwertungsrechte nicht an einen Verlag abgetreten habt). Es wäre nett, wenn ihr das unter eine Creative Commons Lizenz stellt, so dass auch andere das weiterverbreiten dürfen, was wahrscheinlich auch euren Leserkreis erweitern würde.

Ansonsten muss man die Rechte mit dem Autor oder dem Verlag klären, was recht teuer werden kann.


Was ist mit Kurzgeschichten, die keine Kapitel haben?

Eigentlich ist das nicht dafür gedacht. Man sollte dann zumindest ein Kapitel mit der Nummer 0. anlegen.

Für eine Sammlung von Kurzgeschichten ist das Programm aber gut geeignet. Jede Kurzgeschichte ist dann halt ein Kapitel.


Deutsche Umlaute werden nicht richtig angezeigt.

Dann wurde der Text wahrscheinlich in der falschen Zeichenkodierung abgespeichert. Beim Texteditor mal die Option „Speichern unter...“ suchen, und dort schauen, ob man die Kodierung einstellen kann. Es sollte UTF-8 verwendet werden.


Wie bekommt man deutsche Anführungsstriche?

Das muss schon in der Textdatei richtig angewandt werden. Sowas sollte nicht erst auf dem Server geschehen (aus Komplexitäts- und Effizienz-Gründen). Das ist also eine Aufgabe für den Texteditor, bzw. das Betriebssystem.

Unter GNU/Linux bekommt man idR. Anführungsstriche unten („) mit der Tastenkombination AltGr + v, und Anführungsstriche oben (“) mit AltGr + b. Für Binnenzitate (‚‘) verwende man zusätzlich die Shift-Taste. Lange Gedankenstriche (—) bekommt man mit AltGr + Shift + -.


Wie kann man das Layout verändern?

Das Layout kann über die Datei „lesen.css“ sehr flexibel angepasst werden. Man kann es jedoch nicht für einzelne Bücher individuell ändern.

Falls man zwei Designs zur Auswahl anbieten will, kann man zwei Programme kompilieren, die über die config.h unterschiedliche CSS-Dateien einbinden. Mit den Makros ALTERNATIVE und ALTERNATIVEURL kann man auf den jeweils anderen Stil verweisen. Das funktioniert aber nur beim Aufruf als CGI.


Kann man die Bücher auch in andere Seiten einbetten?

Ja, über ein „iframe“.

<iframe src="http://akfoerster.de/lesen/Kandide/index.xhtml" width=630 height=500></iframe>

Die Adresse muss natürlich entsprechend angepasst werden. Die Breite (width) und Höhe (height) sind beliebig anpassbar.


Kannst du mal die lange Lizenz in kurzen Worten wiedergeben?

Man darf das Programm verbreiten, mit oder ohne Veränderungen, aber nur unter der gleichen Lizenz. Man darf das Programm jedoch nicht nur in kompilierter Form weitergeben, sondern muss immer auch den entsprechenden Quelltext mit anbieten. Selbstverständlich muss man die Copyright-Hinweise intakt lassen und auch immer die Lizenz mitliefern. Überarbeitete Versionen müssen entsprechend gekennzeichnet werden.

Wenn man das Programm selbst nicht verbreitet, sondern nur auf einem Server einsetzt, hat man gar keine Verpflichtungen.


Ist das Programm anfällig für das Jahr-2038-Problem?

Ja. Im Jahr 2038 wird es bei vielen der heutigen 32-Bit Systemen zu einem Überlauf kommen, so dass das Datum falsch berechnet wird.

Dies tritt auf Systemen auf, bei denen time t nur 32 Bit hat. Auf 64-Bit Systemen ist das Problem bereits behoben. Es kann aber auch da trotzdem zu Problemen mit älteren Dateisystemtreibern kommen.

Dieses Programm hat Gegenmaßnahmen, aber wirklich gelöst werden kann das nur auf der Ebene des Betriebssystems.

Es wird derzeit daran gearbeitet, auch auf 32-Bit Systemen den Typ time t auf 64 Bit umzustellen. Nach einer solchen Umstellung sollte dieses Programm neu kompiliert werden, um das Problem zu beheben.


Wie steht es mit Zwischenspeichern (Cache/Proxy)?

Das Programm ist so ausgelegt, dass die Bücher zwischengespeichert werden können. Die genauen Fristen kann man in der „config.h“ einstellen.

Auch das Datum der letzten Dateibearbung wird übermittelt. Das hat auch Einfluss auf Zwischenspeicher. Allerdings wird das Datum der Programmdatei nicht berücksichtigt. Eventuell ist es hilfreich, nach einer Aktualisierung der Software nochmal alle Textdateien anzufassen („touch *.txt“).


Ist Verschlüsselung über HTTPS möglich?

Die http-Variante unterstützt keine Verschlüsselung.

Bei der CGI-Variante geht das, wenn der Webserver das unterstützt. Man sollte überprüfen, ob bei Weiterleitungen die Verschlüsselung beibehalten wird. Das ist etwas wackelig, da hier die Spezifikation ungenau ist. Mit Apache funktioniert es.


Wie sieht es mit Kompression aus?

Die http-Variante unterstützt gar keine Kompression.

Auch die CGI-Variante selber unterstützt keine Kompression. Die Dateien müssen unkomprimiert auf dem Server liegen. Man kann aber manche Webserver so konfigurieren, dass sie die Daten vor dem versenden komprimieren; zum Beispiel abhängig vom Typ der Daten. Das Programm gibt Daten des Typs application/xhtml+xml und text/plain aus, außerdem wird eine externe Datei vom Typ text/css eingebettet.


Wo bekomme ich einen Fraktur-Schriftsatz her?

Unter <http://unifraktur.sf.net>. Lizenz: SIL Open Font License (OFL) 1.1

100. Lizenz

Copyright © 2014-2018 Andreas K. Förster

Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber ohne irgendeine Garantie, sogar ohne die implizite Garantie der Marktreife oder der Verwendbarkeit für einen bestimmten Zweck. Details finden Sie in der GNU General Public License.

Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <http://www.gnu.org/licenses/>.