将图像缓存到 return 代码 304 而不是 200

Caching an image to return code 304 rahter than 200

我的网站中有一些图片很少更改,但页面重新加载会一遍又一遍地重新呈现它们,并返回代码 200 OK。我想缓存这些图像,以便返回 304。 我正在使用 Spting MVC,并且使用了 HttpServletResponse setHeader 方法。

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

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

您需要将 cache-control header 设置为图像响应,而不是 html-page 响应。

如果您想将 cache-control header 应用到所有图像,那么 springs 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>

此解决方案将设置 max-age=2678400,但不会发送 304 响应!取而代之的是,浏览器甚至不会再次发送对这张图片的第二次请求,因为浏览器会缓存这张图片。