Spring 缓存图像以返回大于200的代码304

Spring 缓存图像以返回大于200的代码304,spring,http,spring-mvc,http-headers,request-headers,Spring,Http,Spring Mvc,Http Headers,Request Headers,我在我的网站上有一些很少改变的图片,但是页面重新加载会一次又一次地重新加载它们,返回代码200 OK。我想缓存这些图像,这样我就可以取回304。 我使用的是Spting MVC,我使用的是HttpServletResponse setHeader方法 httpResponse.setHeader("Cache-Control", "max-age=36000"); 问题是,此方法将头设置为整个响应,而不是单个图像。我想做的是将标题设置为在网络中传输的单个文件,例如图像。我怎样才能做到

我在我的网站上有一些很少改变的图片,但是页面重新加载会一次又一次地重新加载它们,返回代码200 OK。我想缓存这些图像,这样我就可以取回304。 我使用的是Spting MVC,我使用的是HttpServletResponse setHeader方法

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

问题是,此方法将头设置为整个响应,而不是单个图像。我想做的是将标题设置为在网络中传输的单个文件,例如图像。我怎样才能做到这一点

您需要将缓存控制头设置为图像响应,而不是html页面响应

如果要将缓存控制标头应用于所有图像,springs将为您执行以下操作:

<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


此解决方案将设置max age=2678400,但不会发送304响应!Intead浏览器甚至不会再次发送此图像的第二个请求,因为浏览器将缓存该图像。

谢谢您的快速回复!如果我只想缓存一个图像呢?如何设置特定图像本身的响应?@Anton Raskin:然后您需要微调密钥文件名匹配,或者需要自定义WebContent Interceptor。另一种方法是实现一个提供映像的自定义控制器,在这个控制器中,您可以发送您想要的每个头和返回代码。