From ac5f5133da24185c333da13e8212127fed91e22a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 3 Aug 2026 18:13:47 +0000 Subject: [PATCH] =?UTF-8?q?Emp=C3=AAcher=20le=20navigateur=20de=20m=C3=A9l?= =?UTF-8?q?anger=20un=20index.html=20neuf=20et=20un=20app.js=20en=20cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Symptôme observé en production : après mise à jour, l'application restait vide et aucune requête /api/ n'était émise. Le navigateur avait rechargé index.html et les feuilles de style (nouveaux noms de fichiers) mais servait app.js depuis son cache — la version précédente, qui référence des identifiants disparus du nouveau balisage. Le script levait « Cannot read properties of null » à l'évaluation et s'arrêtait avant d'enregistrer ses gestionnaires et d'appeler boot(). index.html, app.js et les CSS gardant le même nom d'une version à l'autre, ils sont désormais servis avec Cache-Control: no-cache : le navigateur peut toujours les mettre en cache mais doit les revalider, ce qui coûte un 304 quand rien n'a changé. Les polices, stables et volumineuses, gardent un cache long. Vérifié en simulant un redéploiement dans un navigateur au cache chaud : app.js est revalidé et la nouvelle version prise en compte. Suite E2E toujours à 62/62. --- frontend/nginx.conf | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/frontend/nginx.conf b/frontend/nginx.conf index 0783a06..6e5d8e1 100644 --- a/frontend/nginx.conf +++ b/frontend/nginx.conf @@ -26,7 +26,24 @@ server { proxy_set_header X-Forwarded-Proto $scheme; } + # index.html, app.js and the stylesheets keep the same filenames across + # releases, so without this a browser happily pairs a freshly fetched + # index.html with a cached app.js from a previous deploy. That mismatch + # throws on the first missing element id and kills the whole script — which + # looks exactly like a server-side failure. "no-cache" still allows caching, + # it only forces a revalidation, so unchanged files cost one 304. + location ~* \.(?:html|js|css)$ { + add_header Cache-Control "no-cache"; + try_files $uri $uri/ /index.html; + } + + # Fonts are content-stable and large; let them sit in the browser cache. + location ~* \.(?:woff2|woff|ttf)$ { + add_header Cache-Control "public, max-age=2592000"; + } + location / { + add_header Cache-Control "no-cache"; try_files $uri $uri/ /index.html; } }