Skip to content

Fix: 404 and MIME errors on stale Vite assets after redeployment #178

@mitch10593

Description

@mitch10593

Problème

Après un redéploiement, les navigateurs avec un onglet ouvert ou un index.html en cache demandent les anciens fichiers JS hashés par Vite (ex: index-CcuS1ukv.js) qui n'existent plus.

Deux symptômes :

  1. 404 sur les anciens assets
  2. "type MIME interdit (text/html)" — le try_files ... /index.html sert du HTML à la place du JS manquant

Logs :

frontend-1 | [error] open() "/usr/share/nginx/html/assets/index-CcuS1ukv.js" failed (2: No such file or directory)
Le chargement du module à l'adresse « https://www.veaf.org/assets/index-BDzLx6k2.js » a été bloqué en raison d'un type MIME interdit (« text/html »).

Cause

  • index.html n'a pas de headers anti-cache → le navigateur peut servir une version en cache qui référence d'anciens assets hashés
  • Le try_files $uri $uri/ /index.html dans frontend/nginx.conf sert du HTML quand un asset JS n'existe plus → erreur MIME

Solution

1. frontend/nginx.conf

Ajouter :

  • location = /index.html avec Cache-Control: no-cache, no-store, must-revalidate
  • location /assets/ avec try_files $uri =404 (pas de fallback SPA)

2. deploy/nginx.conf

Ajouter les directives proxy_pass_header pour propager les headers Cache-Control du frontend nginx.

Vérification

# index.html ne doit PAS être caché
curl -I https://www.veaf.org/
# → Cache-Control: no-cache, no-store, must-revalidate

# Un asset manquant doit retourner 404 (pas du HTML)
curl -I https://www.veaf.org/assets/nonexistent.js
# → HTTP 404

# Les assets existants restent cachés longtemps  
curl -I https://www.veaf.org/assets/index-XXXXX.js
# → Cache-Control: public, immutable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions