CSS bloqué (SRI)
Si l'interface d'admin se met soudainement à s'afficher en texte non stylé, ou si l'éditeur perd sa barre d'outils de mise en forme, la cause habituelle est un hash de Subresource Integrity (SRI) périmé : la somme de contrôle embarquée dans la page ne correspond plus au fichier sur disque après une mise à jour. Cette page explique pourquoi cela arrive et comment corriger en une étape.
Ce qui se passe
L'interface d'admin protège ses propres feuilles de style, polices et scripts avec SRI ; chaque page staff embarque la somme de contrôle du fichier exact qu'elle charge. Si le navigateur reçoit un fichier dont la somme de contrôle ne correspond pas à ce que la page promet, il refuse de l'exécuter ou de le charger. C'est la protection qui fonctionne ; ici, la somme de contrôle elle-même est périmée.
Les sommes de contrôle sont calculées une fois, au démarrage de l'app. Si l'un des fichiers protégés est remplacé sur disque pendant que l'app continue de tourner (un hotfix copié sur place, un actif mis à jour entre les étapes d'un déploiement manuel) le serveur continue de dire aux navigateurs l'ancienne somme de contrôle tout en servant le nouveau fichier. Le décalage bloque l'actif.
Les actifs protégés sont la feuille de style propre à l'admin, ses définitions de polices, la feuille de style et le script de l'éditeur, et le script des réglages : les fichiers cœur fournis de l'UI d'admin. Le désalignement de n'importe lequel d'entre eux produit le même symptôme : la zone d'admin s'affiche non stylée, avec des fonctionnalités dépendant de ces fichiers (notamment l'éditeur rich-text) qui échouent en silence.
Le correctif : redémarrer l'app
Redémarrer recalcule chaque hash depuis les fichiers tels qu'ils sont réellement, et le symptôme disparaît. C'est le correctif complet : rien d'autre n'est nécessaire.
- Sous systemd :
systemctl restart chinaski@<instance>- Sous hypnotoad :
hypnotoad cms.pl # le rechargement à chaud redémarre aussi les workers avec des hashes fraisPuis faites un hard-refresh de la page d'admin (Ctrl/Cmd-Shift-R) une fois, car le navigateur peut avoir quelques échecs en cache. Tout devrait se rendre stylé à nouveau immédiatement.
Sur les déploiements standards, le script de déploiement redémarre le service dans son flux normal, donc ce problème se limite en pratique au remplacement manuel de fichiers pendant que le processus tourne.
Confirmer que c'était le SRI
- Ouvrez la page d'admin cassée et les devtools du navigateur → onglet Console/Network.
- Un actif bloqué apparaît avec une erreur d'intégrité dans la console (« Failed to find a valid digest in the 'integrity' attribute… »).
- Il nomme l'un des cinq fichiers protégés : la feuille de style admin, fonts.css, le CSS/JS de l'éditeur, ou le script des réglages.
- Vérification optionnelle : calculez le SHA-256 du fichier et confirmez qu'il diffère de la somme de contrôle embarquée dans la page (ce décalage est la définition du problème).
Symptôme apparenté : hash manquant (actifs chargés sans vérification)
Le cas inverse existe aussi. Si un fichier protégé est manquant ou illisible au démarrage de l'app, aucun hash n'est calculé pour lui ; le log de démarrage le nomme (SRI hash failed for <file>), et les pages chargent cet actif sans vérification d'intégrité. Le correctif dans ce cas est de restaurer le fichier et de redémarrer. Tant que cela persiste, l'admin charge l'actif sans la protection d'intégrité, à remarquer plutôt qu'à ignorer.
Le prévenir
- Déployez comme une unité. Copier des fichiers sur une instance en cours d'exécution sans redémarrage est le seul déclencheur réaliste. Le flux de déploiement standard redémarre le service en dernière étape ; gardez cette habitude pour les hotfixes manuels aussi.
- Surveillez la ligne de démarrage. Au boot l'app journalise "SRI hashes computed for 5 admin assets." Cette ligne confirme des hashes à jour ; son absence, ou un avertissement individuel
SRI hash failed, nomme exactement quel fichier manque. - Rappelez-vous le périmètre. Cela couvre uniquement les cinq fichiers du bundle admin. Les fichiers de thème et du site public n'ont pas de cycle de vie SRI et n'ont pas besoin de redémarrages.