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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.