- Un format d’archive HTML monofichier permettant au navigateur web d’effectuer un chargement différé (lazy-loading) de manière efficace, en incluant toutes les ressources tout en combinant caractère statique, unicité du fichier et efficacité
- Combine un en-tête HTML et JavaScript avec le HTML source et les ressources sous forme de tarball, puis le JS ne charge que les portions nécessaires via des requêtes HTTP Range
- Les solutions existantes comme SingleFile ou MHTML offrent un format statique et monofichier, mais manquent d’efficacité ; Gwtar résout ce problème
- Fonctionne uniquement avec les fonctions standard du navigateur, sans configuration supplémentaire côté serveur ; dans certains environnements comme Cloudflare, il utilise le type MIME
x-gwtar
- Permet d’assurer à la fois la pérennité et l’accessibilité de grandes pages HTML, ce qui le rend utile pour l’archivage web à long terme et la conservation de matériaux de recherche reproductibles
Présentation de Gwtar
- Gwtar est un nouveau format d’archive polyglotte constitué d’un fichier HTML unique, dans lequel le navigateur ne charge que les parties nécessaires via des requêtes HTTP Range
- Utilisé sur Gwern.net pour distribuer de grandes archives HTML
- Le JS de l’en-tête HTML interrompt le téléchargement complet du fichier et ne récupère que les ressources nécessaires via des requêtes partielles (range requests)
- En conséquence, le serveur ne fournit qu’un seul fichier HTML, mais l’utilisateur ne télécharge que les ressources dont il a besoin
- Toutes les fonctionnalités reposent sur les capacités standard du navigateur, ce qui garantit la compatibilité future
Le triple dilemme des archives HTML
- Les archives HTML ont une limite classique : elles ne satisfont généralement que deux critères parmi caractère statique, fichier unique et efficacité
- Exemple : SingleFile est statique et monofichier mais inefficace, tandis que WARC est statique et efficace mais n’est pas un format monofichier
- Les captures générées avec SingleFile fournissent une page entièrement statique, mais intègrent toutes les ressources en Base64, ce qui fait facilement grimper la taille du fichier à plusieurs centaines de Mo
- Même si l’utilisateur ne consulte qu’une petite partie de la page, il doit télécharger l’intégralité du fichier, d’où une forte inefficacité
- Gwern.net a tenté de résoudre ce problème avec deconstruct_singlefile.php pour séparer les ressources, mais au prix de la perte du caractère monofichier
L’approche technique de Gwtar
- Utilise des requêtes HTTP Range pour télécharger sélectivement certaines parties du fichier
- Adopte une structure d’archive concaténée combinant HTML + en-tête JS et, à la suite, un tarball
- La commande JS
window.stop() interrompt le téléchargement après l’en-tête, puis seules les ressources nécessaires sont demandées
- Le navigateur effectue le rendu comme pour un HTML classique, tandis que le JS intercepte les requêtes de ressources pour les convertir en requêtes Range
Génération et implémentation
- Le script PHP deconstruct_singlefile.php permet de convertir un HTML SingleFile en Gwtar
- Prend en charge la recompression JPG/PNG/GIF ainsi que l’ajout de données PAR2 FEC (correction d’erreurs directe)
- Une fois le JS exécuté, le navigateur ne charge via Range que les ressources nécessaires ; si le JS est désactivé, le téléchargement complet du fichier sert de solution de repli
- Basé sur des standards, sans configuration serveur ni logiciel additionnel requis, et le fichier unique peut être restauré en HTML multifichier
Performances et compatibilité
- Si les requêtes Range ne sont pas prises en charge, le fichier entier est téléchargé, mais la compression gzip/Brotli peut compenser en partie la vitesse
- Cloudflare supprime l’en-tête Range des réponses
text/html, donc Gwern.net contourne cela en définissant le type MIME sur x-gwtar
- Consultation locale impossible :
- C’est aussi le cas de SingleFileZ, car les politiques de sécurité du navigateur (CORS, etc.) bloquent les requêtes JS
- C’est regrettable, mais considéré comme un compromis acceptable ; la consultation locale peut être résolue en convertissant vers un format non dépendant du JS
Fonctionnalités étendues
- Il est possible d’ajouter à la fin d’un fichier Gwtar des données binaires supplémentaires (par ex. FEC, signature, métadonnées)
- PAR2 permet de récupérer le fichier en cas de corruption partielle
- Une signature GPG peut être insérée sous forme de commentaire HTML pour permettre la vérification d’intégrité
- Les versions futures prévoient notamment la vérification de hash des ressources, le préchargement automatique, la compression intégrée et la prise en charge de plusieurs pages
Cas d’usage possibles
- Adapté aux grandes pages HTML ou à des recherches scientifiques reproductibles intégrant des jeux de données de recherche (par ex. SQLite3)
- Il devient possible de charger directement une base de données dans le navigateur via des requêtes Range pour l’analyser
- Le format est proposé comme format d’archivage web conciliant à la fois conservation à long terme et accessibilité
Licence et développement futur
- La documentation et le code de Gwtar sont publiés dans le domaine public CC-0
- Pour les versions futures (v2), sont envisagés notamment la généralisation obligatoire du FEC, la compression intégrée, la prise en charge de plusieurs documents et une meilleure déduplication
Aucun commentaire pour le moment.