`
jobar
  • 浏览: 341270 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

修复ETag头不生成的bug

 
阅读更多
已经注入了过滤器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");
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics