修理ETag头不生成的bug
修复ETag头不生成的bug
已经注入了过滤器ShallowEtagHeaderFilter
但ETag响应头没有生成。
解决过程:
查看ShallowEtagHeaderFilter源代码,发现这个方法:
原来ETag的生成需要满足三个条件:
那就好办了,再response里制定Cache-Control
已经注入了过滤器ShallowEtagHeaderFilter
@Bean public Filter etagFilter() { return new ShallowEtagHeaderFilter(); }
但ETag响应头没有生成。
解决过程:
查看ShallowEtagHeaderFilter源代码,发现这个方法:
protected boolean isEligibleForEtag(HttpServletRequest request, HttpServletResponse response, int responseStatusCode, byte[] responseBody) { if (responseStatusCode >= 200 && responseStatusCode < 300 && HttpMethod.GET.name().equals(request.getMethod())) { String cacheControl = (responseGetHeaderAvailable ? response.getHeader(HEADER_CACHE_CONTROL) : null); if (cacheControl == null || !cacheControl.contains(DIRECTIVE_NO_STORE)) { return true; } } return false; }
原来ETag的生成需要满足三个条件:
[1]响应状态一定得是2xx
[2]请求方法为GET
[3]响应Cache-Control头部没设置或者不能包含“no-store”指令
那就好办了,再response里制定Cache-Control
response.setHeader("Cache-Control", "no-cache");