How to Disable Browser Caching

In some web-app can be useful avoid browser caching of pages. This implies that a new request is needed every time a page is loaded.
Basically there are three ways to do this:

  • using HTML code
  • defining a Java Filter on wanted URL
  • if you are using SPring Framework, defining an Interceptor


The effect can be achieved by using meta tags in the HTML header:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">

The Cache-Control header was added in HTTP 1.1, while the other two were also present in HTTP 1.0.

Java Filter

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
httpResponse.setHeader("Pragma", "no-cache"); // HTTP 1.0
httpResponse.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);

The configuration of web.xml should looks like this:

<!-- MyServler -->

<!-- MyFilter -->
        <param-value>{{PATTERN HERE}}</param-value>

Spring MVC

In Spring MVC, you can create an interceptor like so:

public class DisableBrowserCachingInterceptor extends HandlerInterceptorAdapter {

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0
        response.setDateHeader("Expires", 0); // Proxies

A handler interceptor is registered to the DefaultAnnotationHandlerMapping bean, which is charged with applying interceptors to any class marked with a @Controller annotation.
You can specify multiple interceptors in the interceptors property, whose type is an array.

<beans ...>
	<bean id="measurementInterceptor" class="com.apress.springrecipes.court.web.MeasurementInterceptor" />
	<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
		<property name="interceptors">
		     <ref bean="measurementInterceptor" />

If you want to learn more retro games news, read our magazine and subscribe to our newsletter.