- Ein Single-HTML-Archivdateiformat, das von Webbrowsern effizient per Lazy Loading geladen werden kann und trotz Einbettung aller Assets gleichzeitig statisch, einzeln und effizient ist
- Verbindet hinter einem HTML- und JavaScript-Header das ursprüngliche HTML und die Assets in Tarball-Form, wobei JS über HTTP-Range-Requests nur die benötigten Teile lädt
- Bestehende Formate wie SingleFile oder MHTML sind zwar statisch und bestehen aus einer einzelnen Datei, aber ineffizient; Gwtar löst dieses Problem
- Funktioniert nur mit Standard-Browserfunktionen ohne zusätzliche serverseitige Konfiguration; in einigen Umgebungen wie Cloudflare wird dafür der MIME-Typ
x-gwtar verwendet
- Sichert bei großen HTML-Seiten gleichzeitig Langzeitarchivierbarkeit und Zugänglichkeit und eignet sich damit für langfristiges Web-Archiving und die Aufbewahrung reproduzierbarer Forschungsmaterialien
Überblick über Gwtar
- Gwtar ist ein neues Polyglot-Archivformat, das aus einer einzigen HTML-Datei besteht und bei dem der Browser per HTTP-Range-Request nur die benötigten Teile lädt
- Wird auf Gwern.net zur Bereitstellung großer HTML-Archive verwendet
- Das JS im HTML-Header bricht den Download der gesamten Datei ab und lädt nur die benötigten Assets per Teilanforderung (Range Request) nach
- Dadurch liefert der Server nur eine einzige HTML-Datei aus, während der Nutzer nur die tatsächlich benötigten Assets herunterlädt
- Sämtliche Funktionen sind mit Standard-Browserfunktionen umgesetzt und sichern so zukünftige Kompatibilität
Das dreifache Dilemma von HTML-Archiven
- HTML-Archive hatten bisher die Einschränkung, dass sie nur zwei von drei Eigenschaften zugleich erfüllen konnten: Statisches Verhalten, eine einzelne Datei und Effizienz
- Beispiel: SingleFile ist statisch und einzeln, aber ineffizient; WARC ist statisch und effizient, aber keine einzelne Datei
- Mit SingleFile erzeugte Snapshots liefern vollständige statische Seiten, binden aber alle Assets per Base64 inline ein, wodurch die Dateigröße auf mehrere hundert MB anwachsen kann
- Selbst wenn Nutzer nur einen Teil der Seite ansehen, müssen sie die gesamte Datei herunterladen, was ineffizient ist
- Gwern.net trennte zur Lösung dieses Problems die Assets mit deconstruct_singlefile.php, verlor damit jedoch die Eigenschaft der Einzeldatei
Technischer Ansatz von Gwtar
- Mithilfe von HTTP-Range-Requests können selektiv nur Teile einer Datei heruntergeladen werden
- Verwendet eine verkettete Archivstruktur, bei der hinter HTML + JS-Header ein Tarball angehängt wird
- Mit dem JS-Befehl
window.stop() wird der Download nach dem Header abgebrochen, und nur die benötigten Assets werden angefordert
- Der Browser rendert die Datei wie normales HTML, während das JS Asset-Anfragen abfängt und in Range-Requests umwandelt
Erstellung und Implementierung
- Mit dem PHP-Skript deconstruct_singlefile.php lässt sich SingleFile-HTML in Gwtar umwandeln
- Unterstützt Re-Kompression von JPG/PNG/GIF sowie das Hinzufügen von PAR2-FEC-Daten (Forward Error Correction)
- Der Browser lädt nach Ausführung des JS nur die benötigten Assets per Range-Request; ist JS deaktiviert, wird stattdessen die gesamte Datei heruntergeladen
- Standardbasiert, daher keine Serverkonfiguration oder zusätzliche Software erforderlich; außerdem lässt sich die einzelne Datei wieder in Multi-File-HTML zurückverwandeln
Leistung und Kompatibilität
- Wenn Range-Requests nicht unterstützt werden, wird die gesamte Datei heruntergeladen; gzip/Brotli-Kompression kann die Geschwindigkeit dann verbessern
- Cloudflare entfernt den Range-Header bei
text/html-Antworten, daher setzt Gwern.net den MIME-Typ auf x-gwtar, um dies zu umgehen
- Lokale Dateiansicht ist nicht möglich :
- Das gilt ebenso für SingleFileZ, da Browser-Sicherheitsrichtlinien (CORS usw.) JS-Anfragen blockieren
- Das wird zwar bedauert, aber als akzeptabler Trade-off betrachtet; lokales Browsing lässt sich durch Umwandlung in Dateien ohne JS-Abhängigkeit lösen
Erweiterte Funktionen
- Am Ende einer Gwtar-Datei können zusätzliche Binärdaten angehängt werden, z. B. FEC, Signaturen oder Metadaten
- Mit PAR2 ist eine Wiederherstellung bei teilweiser Dateibeschädigung möglich
- Durch Einfügen einer GPG-Signatur in Form eines HTML-Kommentars ist Integritätsprüfung möglich
- Für künftige Versionen sind Asset-Hash-Prüfung, automatisches Prefetching, eingebaute Kompression und Unterstützung mehrerer Seiten geplant
Einsatzmöglichkeiten
- Geeignet für große HTML-Seiten oder reproduzierbare wissenschaftliche Forschung mit Forschungsdatensätzen (z. B. SQLite3)
- Datenbanken können direkt im Browser per Range-Request geladen und analysiert werden
- Wird als Web-Archivierungsformat vorgeschlagen, das Langzeitarchivierbarkeit und Zugänglichkeit zugleich sichert
Lizenz und weitere Entwicklung
- Dokumentation und Code von Gwtar sind als CC-0 Public Domain veröffentlicht
- Für künftige Versionen (v2) werden verpflichtendes FEC, eingebaute Kompression, Unterstützung mehrerer Dokumente und verbesserte Deduplizierung geprüft
Noch keine Kommentare.