Подтвердить что ты не робот

Tomcat: Cache-Control

Jetty имеет параметр CacheControl (может быть указан webdefault.xml), который определяет поведение кэширования клиентов (путем воздействия на заголовки, отправленные клиентам).

Есть ли у Tomcat аналогичный вариант? Короче говоря, я хочу отключить кэширование всех страниц, доставленных сервером tomcat и/или с помощью определенного webapp?

Обновление

Обратите внимание, что я не имею в виду кеширование на стороне сервера. Я хочу, чтобы сервер сообщал всем клиентам (браузерам) не использовать свой собственный кеш и всегда извлекать контент с сервера. Я хочу сделать это для всех ресурсов, включая статические ресурсы (.css,.js и т.д.) Сразу.

4b9b3361

Ответ 1

Аналогично сообщению выше, кроме некоторых проблем с этим кодом. Это отключит все кеширование браузера:

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);
    }

}

а затем отобразите в web.xml, как описано в Ответ Стю Томпсона.

Ответ 2

Так как Tomcat 7 содержит контейнер, срок действия которого может помочь. См:

ExpiresFilter - это порт API сервлета Java Apache mod_expires. Этот фильтр управляет настройкой заголовка Expires HTTP и директивы max-age заголовка Cache-Control HTTP в ответах сервера. Дата истечения срока действия может быть установлена ​​относительно времени, в течение которого был изменен исходный файл, или времени доступа клиента.

<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>

Ответ 3

Я не верю, что есть такая конфигурация. Но не стоит пытаться написать фильтр, чтобы настроить заголовок Cache-Control на основе каждого webapp. Например:.

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 {}
}

И вы разместите этот фрагмент в файле webapp web.xml.

<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>

Ответ 4

На самом деле в конфигурации Tomcat есть несколько элементов, которые непосредственно влияют на это. См. Документацию на http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html, например.

Atlassian рекомендует следующие два утверждения для ENABLE кэширования на стороне браузера, чтобы Microsoft Internet Explorer мог правильно загружать и просматривать прикрепленные документы:

<Valve className="org.apache.catalina.authenticator.FormAuthenticator" securePagesWithPragma="false" />
<Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator" securePagesWithPragma="false" />

Ответ 5

может быть именно то, что вы ищете:

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.

Также удалите папку кэша приложений в /work/Catalina/localhost после изменения этого флага.

Ответ 6

Единственный параметр, о котором я знаю, - это disableProxyCaching on <Valve>. См. здесь.