如何在Tomcat 7中将Cache Control设置为no-cache?

问题描述 投票:0回答:1

我正在尝试将 Tomcat 7 的

Cache Control
设置为
no-cache
选项。

我尝试在我的

ExpiresFilter
中使用
web.xml
,如下所示:

<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 0 seconds</param-value>
    </init-param>
    <init-param>
    <param-name>ExpiresByType text/css</param-name>
    <param-value>access plus 0 seconds</param-value>
    </init-param>
    <init-param>
    <param-name>ExpiresByType application/javascript</param-name>
    <param-value>access plus 0 seconds</param-value>
    </init-param>

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

但是,当我阅读响应头时,我得到的只是:

Cache-Control:max-age=0

而不是

Cache-Control: no-cache

如何设置我的 Tomcat 服务器仅通过配置文件指定

Cache-Control: no-cache

tomcat caching tomcat7 cache-control no-cache
1个回答
0
投票

为了设置“Cache-Control: no-cache”,您必须创建一个自定义过滤器,ExpiresFilter 用于根据 HTTP 响应的响应添加“Expires”和“Cache-Control: max-age=”标头“Content-Type”并且无助于设置“no-cache”

请按照以下步骤操作

  1. 应编写自定义过滤器以设置标头,将过滤器打包在.jar中

  2. 将.jar放入$CATALINA_HOME/lib

  3. 在 $CATALINA_HOME/lib 中添加 jar 后,验证是否没有“ClassNotFoundException”


    package nocache;
    
    import javax.servlet.Filter;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.ServletException;
    import java.io.IOException;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    
    public class CacheFilter implements Filter { 
    
        @Override 
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
                             FilterChain filterChain) throws IOException, ServletException { 
    
            HttpServletResponse response = (HttpServletResponse) servletResponse; 
            response.setHeader("Cache-Control", "no-cache"); 
            filterChain.doFilter(servletRequest, response); 
        } 
    }

  1. 将以下内容添加到 $CATALINA_HOME/conf/web.xml 文件中

示例 web.xml 部署描述符片段


  <filter>
        <filter-name>CacheFilter</filter-name>
        <filter-class>nocache.CacheFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

  1. 访问应用程序并检查响应标头。
© www.soinside.com 2019 - 2024. All rights reserved.