Adloun

Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 9 · Application directe du cours

Mettre en cache les fichiers à empreinte

Le client Vue face au serveur · niveau 3 (difficile)

Énoncé

Les fichiers de /assets/ portent une empreinte dans leur nom (index-IaUop069.js) : ils ne changent jamais sous le même nom. Les servir avec un cache d'un an, sans toucher à index.html. Vérifier par un test.

Corrigé

On déclare un gestionnaire de ressources propre à /assets/**, avec un Cache-Control long et immuable ; les autres fichiers gardent le comportement par défaut.


/** Exercice 9.8 : les fichiers de /assets/ ont une empreinte dans leur nom : un an de cache. */
@Configuration
public class CacheConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registre) {
        registre.addResourceHandler("/assets/**")
                .addResourceLocations("classpath:/static/assets/")
                .setCacheControl(CacheControl.maxAge(Duration.ofDays(365)).cachePublic().immutable());
    }
}

    @Test
    void lesFichiersAEmpreinteSontMisEnCache() throws Exception {
        Resource script = new PathMatchingResourcePatternResolver()
                .getResources("classpath:/static/assets/index-*.js")[0];
        var reponse = mvc.get().uri("/assets/" + script.getFilename()).exchange();
        System.out.println("Cache-Control : " + reponse.getResponse().getHeader("Cache-Control"));
        assertThat(reponse).hasStatusOk()
                .hasHeader("Cache-Control", "max-age=31536000, public, immutable");
        assertThat(mvc.get().uri("/index.html").exchange().getResponse().getHeader("Cache-Control"))
                .contains("no-cache");
    }

Le test affiche Cache-Control : max-age=31536000, public, immutable. Spring Security écrit d'ordinaire no-cache, no-store sur toutes les réponses ; il s'abstient quand la réponse a déjà son propre Cache-Control, ce qui est le cas ici. Et index.html doit rester sans cache : c'est lui qui désigne, après chaque nouvelle version, les nouveaux noms de fichiers.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →