Tomcat: Cache-Control

Jetty a un paramètre CacheControl (peut être spécifié webdefault.xml) qui détermine le comportement de mise en cache des clients (en affectant les en-têtes envoyés aux clients).

Est-ce que Tomcat a une option similaire? En bref, je veux désactiver la mise en cache de toutes les pages fournies par un serveur Tomcat et / ou par une application Web spécifique?

Mettre à jour

Veuillez noter que je ne fais pas référence à la mise en cache côté serveur. Je veux que le serveur dise à tous les clients (navigateurs) de ne pas utiliser leur propre cache et de toujours récupérer le contenu du serveur. Je veux le faire pour toutes les ressources, y compris les ressources statiques (.css, .js, etc.) à la fois.

Semblable à l’article ci-dessus, sauf qu’il y a quelques problèmes avec ce code. Cela désactivera toute la mise en cache du navigateur:

import javax.servlet.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; public class CacheControlFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse resp = (HttpServletResponse) response; resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT"); resp.setDateHeader("Last-Modified", new Date().getTime()); resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0"); resp.setHeader("Pragma", "no-cache"); chain.doFilter(request, response); } } 

puis mappez dans web.xml comme décrit dans la réponse de Stu Thompson .

Étant donné que Tomcat 7 contient un conteneur, le filtre expirant peut vous aider. Voir:

ExpiresFilter est un port de l’API Java Servlet de Apache mod_expires . Ce filtre contrôle le paramètre de l’en-tête HTTP Expires et la directive max-age de l’en Cache-Control tête HTTP Cache-Control dans les réponses du serveur. La date d’expiration peut être définie par rapport à l’heure de la dernière modification du fichier source ou à l’heure de l’access au client.

  ExpiresFilter org.apache.catalina.filters.ExpiresFilter  ExpiresByType image access plus 10 days   ExpiresByType text/css access plus 10 hours   ExpiresByType application/javascript access plus 10 minutes    ExpiresDefault access plus 0 seconds    ExpiresFilter /* REQUEST  

Je ne crois pas qu’il existe une configuration pour ce faire. Mais il ne devrait pas y avoir beaucoup d’effort pour écrire un filtre pour définir l’en-tête Cache-Control sur une base WebApp. Par exemple:

 public class test implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); ((StatusResponse)response).setHeader("Cache-Control", "max-age=0, private, must-revalidate"); } public void destroy() {} public void init(FilterConfig arg0) throws ServletException {} } 

Et vous placeriez cet extrait dans le fichier web.xml votre application Web.

  SetCacheControl ch.dietpizza.cacheControlFilter   SetCacheControl /*  

Il y a en fait plusieurs éléments dans la configuration de Tomcat qui affectent directement cela. Voir la documentation à l’ adresse http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html par exemple.

Atlassian recommande les deux instructions suivantes pour activer la mise en cache côté navigateur afin que Microsoft Internet Explorer puisse télécharger et afficher correctement les documents joints:

   

peut-être ce que vous recherchez:

http://tomcat.apache.org/tomcat-6.0-doc/config/context.html#Context%20Parameters

  cachingAllowed : If the value of this flag is true, the cache for static resources will be used. If not specified, the default value of the flag is true. 

Supprimez également le dossier de cache de l’application dans / work / Catalina / localhost après avoir modifié cet indicateur.

Le seul paramètre que je connaisse est disableProxyCaching sur les éléments . Voir ici