2015-10-31 7 views
0

У меня есть некоторые изображения на моем веб-сайте, которые редко меняются, но перезагрузка страницы повторяет их снова и снова, возвращая код 200 OK. Я хотел бы кэшировать эти образы, поэтому я вернусь к 304. Я использую Spting MVC, и я использовал метод setHeader HttpServletResponse.Кэширование изображения для возврата кода 304 rahter than 200

httpResponse.setHeader("Cache-Control", "max-age=36000"); 

Проблема в том, что этот метод устанавливает заголовок для всего отклика, а не для одного изображения. То, что я хотел бы сделать, - установить заголовки в один файл, который передается в сети, например изображение. Как я могу это достичь?

ответ

0

Вам нужно настроить заголовок управления кешем на ответ изображения, но не на ответ html-страницы.

Если вы хотите применить заголовок Cache-Control для всех изображений, а затем пружины WebContentInterceptor будет делать это для вас:

<mvc:interceptors> 
... 

<!-- explicite no caching for all response, except png-images --> 
<bean id="webContentInterceptor" 
     class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
    <property name="cacheSeconds" value="0"/> 
    <property name="useExpiresHeader" value="true"/> 
    <property name="useCacheControlHeader" value="true"/> 
    <property name="useCacheControlNoStore" value="true"/> 
    <property name="alwaysUseFullPath" value="true"/> 
    <property name="cacheMappings"> 
    <props> 
      <!-- 2678400 seconds = 31 days --> 
      <prop key="/resources/images/**/*.png">2678400</prop> 
    </props> 
    </property> 
</bean>  

</mvc:interceptors> 

это решение будет установлено максимального возраста = 2678400, но не будет отправьте ответ 304! Intead браузер даже не отправит второй запрос для этого изображения еще раз, потому что браузер будет кэшировать изображение.

+0

Thanks gor the quick reply! Что, если я хотел бы кэшировать только одно изображение? Как я могу настроить ответ на это конкретное изображение? –

+0

@ Антон Раскин: Затем вам нужно либо уточнить соответствие имени файла, либо настроить WebContentInterceptor. Другой способ - реализовать пользовательский контроллер, который предоставляет изображение, в этом контроллере вы можете отправлять каждый заголовок и возвращаемый код, который вы хотите иметь. – Ralph