47 votes

Tomcat: Cache-Control

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

Ne Tomcat a une option similaire? En bref, je veux désactiver la mise en cache de toutes les pages remis par un serveur tomcat et/ou par une webapp?

Mise à jour

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

45voto

Jack Points 500

Comme de Tomcat 7, il est un contenant fourni expire filtre qui pourra vous aider:

http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#Expires_Filter

ExpiresFilter est un Java Servlet API port de Apache mod_expires. Ce filtre permet de contrôler la définition de l' Expires - tête HTTP et l' max-age directive de l' Cache-Control - tête HTTP dans les réponses du serveur. La date d'expiration peut être définie soit par rapport à la date de la source dernière modification du fichier, ou pour le temps d'accès du client.

<filter>
    <filter-name>ExpiresFilter</filter-name>
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
    <init-param>
        <param-name>ExpiresByType image</param-name>
        <param-value>access plus 10 days</param-value>
    </init-param>
    <init-param>
        <param-name>ExpiresByType text/css</param-name>
        <param-value>access plus 10 hours</param-value>
    </init-param>
    <init-param>
        <param-name>ExpiresByType application/javascript</param-name>
        <param-value>access plus 10 minutes</param-value>
    </init-param>
    <!-- Let everything else expire immediately -->
    <init-param>
        <param-name>ExpiresDefault</param-name>
        <param-value>access plus 0 seconds</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>ExpiresFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

40voto

whitey Points 251

Semblable à l'article ci-dessus, sauf qu'il y a des 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());
        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 .

19voto

Stu Thompson Points 16599

Je ne crois pas qu'il existe une configuration pour ce faire. Mais cela ne devrait pas être un gros effort d'écrire un filtre pour définir l'en-tête Cache-Control par application Web. 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 placez cet extrait dans le fichier web.xml votre application Web.

 <filter>
    <filter-name>SetCacheControl</filter-name>
    <filter-class>ch.dietpizza.cacheControlFilter</filter-class>
</filter>                       
<filter-mapping>
    <filter-name>SetCacheControl</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
 

0voto

Inv3r53 Points 2071

peut être ce que vous cherchez:

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 d'application dans / work / Catalina / localhost après avoir modifié ce drapeau.

0voto

Sean Owen Points 36577

Le seul param je sais de est - disableProxyCaching sur <Valve> - éléments. Voir ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X