已经注入了过滤器ShallowEtagHeaderFilter
但ETag响应头没有生成。
解决过程:
查看ShallowEtagHeaderFilter源代码,发现这个方法:
原来ETag的生成需要满足三个条件:
[list]
[1]响应状态一定得是2xx
[2]请求方法为GET
[3]响应Cache-Control头部没设置或者不能包含“no-store”指令
[/list]
那就好办了,再response里制定Cache-Control
@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的生成需要满足三个条件:
[list]
[1]响应状态一定得是2xx
[2]请求方法为GET
[3]响应Cache-Control头部没设置或者不能包含“no-store”指令
[/list]
那就好办了,再response里制定Cache-Control
response.setHeader("Cache-Control", "no-cache");