1、概念
ShallowEtagHeaderFilter会根据响应的内容生成”shallow etag”,再次请求时,会将该值作为请求头中If-None-Match属性值,并与”shallow etag”的值进行比较,若二者相等返回304, Not Modified。相当于给请求添加缓存的功能。
2、使用
使用shallowEtagHeaderFilter的步骤如下
- 第一步,创建ShallowEtagHeaderFilter对象,
- 第二步,注册ShallowEtagHeaderFilter,拦截DispactherServlet,或者是URL地址都可以。
- 第三步,验证,可以在响应中看到eTag字段。
3、示例
1、第一步:配置ShallowEtagHeaderFilter拦截器拦截DispatcherSerlvet
// 配置请求的分发类型 EnumSet<DispatcherType> dispatchers = EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.FORWARD, DispatcherType.INCLUDE); // 创建ShallowEtagHeaderFilter ShallowEtagHeaderFilter eTagHeader = new ShallowEtagHeaderFilter(); // 生成eTagHeader eTagHeader.setWriteWeakETag(true); // servlet注入拦截器 FilterRegistration.Dynamic shadowETagFilter = servletContext.addFilter("shadowETagFilter", eTagHeader); // 拦截dispatcherServlet shadowETagFilter.addMappingForServletNames(dispatchers, true, "dispatcherServlet");
2、第二步,验证,第一次请求时请求头中无If-None-Match属性,响应码为200。再次请求时,请求头中有If-None-Match属性值,浏览器中的响应码为304
// 调用request.getHeader方法 if-none-match: W/"0d2d08b5003a04494f5de83f30a514e17" // 浏览器中查看 Status Code: 304