2011-01-11 15 views
6

He configurado el Spring 3 MVC servlet Dispatcher en la raíz de mi aplicación web y utilizar MVC: recursos para servir contenido estático como se describe en los documentos: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resourcesPermitir el almacenamiento en caché con Spring MVC MVC: Etiqueta de recursos

La auditoría del navegador Chrome de Google me dice que los recursos son explícitamente no almacenados en caché. Aquí están las cabeceras del mismo navegador dice es enviado con la respuesta:

Cache-Control:max-age=31556926, must-revalidate 
Content-Length:1022 
Content-Type:image/png 
Date:Tue, 11 Jan 2011 00:20:07 GMT 
Expires:Wed, 11 Jan 2012 06:08:53 GMT 
Last-Modified:Mon, 29 Nov 2010 19:53:48 GMT 

Así que, ¿Qué necesito para hacer el cacheables de recursos?

+0

qué se establece el atributo de caché periodo en el MVC: entrada de recursos en el archivo de configuración de aplicaciones? – DwB

+0

sí, y puede ver el valor establecido en la edad máxima de Cache-Control. Esta noche voy a configurar el filtro ETag de Spring y veré si eso resuelve este problema. – digitaljoel

+0

¿El filtro ETag solucionó el problema? Estoy teniendo el mismo problema. – les2

Respuesta

1

Quizás org.springframework.web.servlet.mvc.WebContentInterceptor puede ayudarlo? Sólo tiene que añadir a la lista de interceptores:

<mvc:interceptors> 
    <bean class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
     <property name="cacheMappings"> 
      <props> 
       <prop key="/ajax/promoCodes">300</prop> 
       <prop key="/ajax/options">0</prop> 
      </props> 
     </property> 
    </bean> 
</mvc:interceptors> 
+0

javadoc para esa clase no lo hace parecer que sería lo que estoy buscando. – digitaljoel

3

A partir de Spring Framework 4.2, this is now fixed with more flexible Cache-Control header values.

El valor "must-revalidate" está desactivado por defecto, e incluso se puede escribir algo como esto:

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/resources/**") 
       .addResourceLocations("/static/") 
       .setCacheControl(CacheControl.maxAge(30, TimeUnit.DAYS).cachePublic()); 
    } 

} 
+0

¿Hay alguna manera de hacer lo mismo en la versión anterior a la 4.2? –

+0

No es que yo sepa, en este momento, la actualización a 4.3 es la mejor opción, ya que Spring 3.x tiene EOL en pocos días y 4.3 es la nueva versión LTS. –

+0

gracias por responder, estoy actualizando la primavera :) –

Cuestiones relacionadas