18.14.4浅层ETag支持

ETags的支持由Servlet过滤器ShallowEtagHeaderFilter提供。 这是一个简单的Servlet过滤器,因此可以与任何Web框架结合使用。 ShallowEtagHeaderFilter过滤器创建所谓的浅ETag(相对于深ETag,稍后会详细介绍)。过滤器缓存呈现的JSP(或其他内容)的内容,生成一个MD5哈希,然后将其作为ETag 响应头。 下一次客户端发送相同资源的请求时,它将使用该散列作为If-None-Match值。 过滤器检测到这一点,再次呈现视图,并比较两个散列。 如果相等,则返回304

请注意,此策略可节省网络带宽而不是CPU,因为必须为每个请求计算完整响应。 控制器级别的其他策略(如上所述)可以节省网络带宽并避免计算。

此过滤器具有awriteETagag参数,该参数配置过滤器写入弱ETag,如下所示:W/“02a2d595e6ed9a0b24f027f2b63b134d6”,如RFC 7232第2.3节中所定义。

web.xml中配置ShallowEtagHeaderFilter

<filter>
    <filter-name>etagFilter</filter-name>
    <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class>
    <!-- 配置过滤器写入弱ETag的可选参数
    <init-param>
           <param-name>writeWeakETag</param-name>
           <param-value>true</param-value>
    </init-param>
    -->
</filter>

<filter-mapping>
    <filter-name>etagFilter</filter-name>
    <servlet-name>petclinic</servlet-name>
</filter-mapping>

或者在Servlet 3.0+环境中,

public class MyWebAppInitializer extends AbstractDispatcherServletInitializer {

    // ...

    @Override
    protected Filter[] getServletFilters() {
        return new Filter[] { new ShallowEtagHeaderFilter() };
    }

}

有关详细信息,请参见第18.15节“基于代码的Servlet容器初始化”

results matching ""

    No results matching ""