将图像缓存到 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 响应!取而代之的是,浏览器甚至不会再次发送对这张图片的第二次请求,因为浏览器会缓存这张图片。
我的网站中有一些图片很少更改,但页面重新加载会一遍又一遍地重新呈现它们,并返回代码 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 响应!取而代之的是,浏览器甚至不会再次发送对这张图片的第二次请求,因为浏览器会缓存这张图片。