Bonjour
J'ai un souci sur la gestion des headers HTTP pour le cache suite au passage de Spring 3.0.1 en Spring 3.0.2.
J'ai un controller (sans annotations) qui hérite de MultiActionController et dispose de plusieurs méthodes renvoyant un ModelAndView :
Dans mon fichier de configuration Spring je définis mes mapping d'url, ainsi que de la réécriture d'url via org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public class JsonControler extends MultiActionController{ public ModelAndView getTheme(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView modelAndView = new ModelAndView(); List<MeaDTO> meaList = getService().getTheme(); modelAndView.addObject(RESPONSE,meaList); setCacheControl(response, getWebappConfig().getCacheControlByKey("json.getTheme")); return modelAndView; } protected void setCacheControl(HttpServletResponse response, final int pCacheValue) { if (pCacheValue != -1) { applyCacheSeconds(response, pCacheValue); } response.addHeader("Cache-Control", "stale-while-revalidate=" + webappConfig.getCacheStaleWhileRevalidate()); } ... }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/catalog/**/*.do-json">jsonControler</prop> </props> </property> </bean>Mon problème apparait quand je positionne les headers pour le cache via la méthode setCacheControl sur la réponse. Cette méthode appelle applyCacheSeconds du bean WebContentGenerator et ajoute un paramètre 'stale-while-revalidate' au header Cache-Control.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5<rule match-type="regex"> <from>^/catalog/home/theme.json$</from> <to>getTheme.do-json</to> </rule>
En Spring 3.0.1 cela fonctionne. Entête de la réponse:
En Spring 3.0.2, je me retrouve avec une date d'expiration en double dont une avec une date en 1970, des paramètres du cache-control supplémentaires. Entête de ma réponse http:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Expires : Tue, 16 Aug 2011 xxxx GMT Cache-Control:max-age=1800, stale-while-revalidate=3600
Ce comportement existe encore en Spring 3.0.5.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Expires : Tue, 16 Aug 2011 xxxx GMT, Tue, 01 Jan 1970 xxx GMT Cache-Control:max-age=1800, stale-while-revalidate=3600, no-cache, no-store, max-age=0
Quelqu'un a-t-il déjà été confronté à ce problème ?
Merci d'avance
Partager