Разрешить кэширование с помощью тега Spring MVC mvc: resources - PullRequest
6 голосов
/ 11 января 2011

Я настроил сервлет Spring 3 MVC Dispatcher в корне моего веб-приложения и использую ресурсы mvc: для обслуживания статического контента, как описано в документации: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-static-resources

Аудит браузера Google Chrome сообщаетчто ресурсы явно не кешируются.Вот заголовки, которые тот же браузер отправляет с ответом:

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

Итак, что мне нужно для того, чтобы ресурс мог быть кэширован?

Ответы [ 2 ]

3 голосов
/ 01 июня 2015

Начиная с Spring Framework 4.2, теперь это исправлено с помощью более гибких Cache-Control значений заголовков .

Значение "must-revalidate" теперь по умолчанию отключено, и вы даже можете написать что-то вроде этого:

@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());
    }

}
1 голос
/ 12 октября 2012

Может быть, org.springframework.web.servlet.mvc.WebContentInterceptor может вам помочь? Просто добавьте его в список перехватчиков:

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