About Cache-Control, Tomcat filters and browsers...
Hi,
Since tomcat doesn't provide any hint about cache policies for
images, javascripts and other static files I created a filter for
those files that read like:
public class filterCacheControl implements Filter {
...
public void doFilter(ServletRequest request, ServletResponse
response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse)response).addHeader("Expires", "Thu, 1 Jan
2099 23:59:59 GMT");
((HttpServletResponse)response).addHeader("Cache-Control", "max-
age=600");
((HttpServletResponse)response).addHeader("Last-Modified", "Thu, 1
Jan 1970 00:00:00 GMT");
chain.doFilter(request, response);
}
...
}
The filter works as expected and add the Cache-Control to the HTTP
header.
The problem is that the browser "neglects" it and tries to reload the
files once and once again. The network capture shows next HTTP
conversation:
GET /src/event/common.js HTTP/1.1 <-- Browser request
Host: osiris:8080
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.3) Gecko/
20070310 Iceweasel/2.0.0.3 (Debian-2.0.0.3-2)
Accept: text/xml,application/xml,application/xhtml+xml,text/
html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: es,en;q=0.7,en-us;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: UTF-8,*
Keep-Alive: 300
Connection: keep-alive
Referer:
http://osiris:8080/Controller?formAction=showSearchStatsVoz&formNumeros=&formVerDescendientes=True&formNumeroManual=&formD_day=17&formD_month=04&formD_year 07&formH_day=17&formH_month=04&formH_year 07&formVerDetalles=true&formVerChart=true&formStep=2&formHora1=16&formHora2=18
Cookie: JSESSIONID=ED268E69F6A0993BB152ABDC7545A433
If-Modified-Since: Tue, 17 Apr 2007 09:50:44 GMT
If-None-Match: W/"28830-1176803444000"
Cache-Control: max-age=0
HTTP/1.1 304 Not Modified <-- Tomcat response
Expires: Thu, 1 Jan 2099 23:59:59 GMT
Cache-Control: max-age=600
Last-Modified: Thu, 1 Jan 1970 00:00:00 GMT
Date: Tue, 17 Apr 2007 15:30:14 GMT
Server: Apache-Coyote/1.1
a few seconds later:
GET /src/event/common.js HTTP/1.1 <-- Why????? The browser already
knew the common.js expires on 2099, the Cache-Control has a max-age of
600 seconds, and it wasn't modifyied since 1970.
.....
Thanks in advance for any help, hint or link!!!