`
jobar
  • 浏览: 347235 次
  • 性别: 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");
分享到:
评论

相关推荐

    Go-Go的缓存控制中间件添加ETag头(内容的md5)和Cache-Control头

    同时,`ETag`的生成方式也可以多样化,例如根据文件的修改时间或者其他唯一标识来生成。 通过这样的缓存控制中间件,我们可以有效地利用HTTP缓存机制,提高服务性能,减轻服务器负载。然而,缓存策略的选择和实现...

    etag的讲解etag的讲解

    3. **考虑性能**:在大型应用中,可能需要优化Etag的生成策略,比如使用弱校验符(Weak Etag,以"W/"开头)或者基于资源内容的哈希值生成Etag,以降低服务器负载。 总结,Etag是HTTP缓存机制的关键组成部分,它帮助...

    Laravel开发-laravel-etag

    - **使用强Etag**:强Etag(不带引号的Etag)基于资源内容生成,只要内容改变,Etag就会改变。避免使用弱Etag(带引号的Etag),因为它们只在资源的实体标签发生更改时才发生变化,可能引入不必要的复杂性。 - **...

    Laravel开发-laravel-etag-middleware

    中间件的工作原理是,它会在响应发送到客户端之前计算资源的哈希值,然后将其作为Etag头字段添加到响应中。在后续的请求中,如果资源未更改,中间件会检查客户端发送的If-None-Match头,如果Etag匹配,则返回304 Not...

    Laravel开发-laravel-weak-etag-middleware

    弱ETag不区分大小写,并且允许一些元信息的变化而不改变其值,这通常用在资源内容变化不大但不影响功能的情况,比如CSS或JavaScript文件的压缩和格式化。 这个中间件的实现可能包含以下步骤: 1. 定义中间件类:在...

    Etag和Expires.docx

    Etag是服务器为每个资源生成的一个唯一标识,它能更准确地判断资源是否发生变化。当客户端再次请求时,会发送If-None-Match报头,包含上次接收到的Etag值。如果服务器发现资源的Etag未变,同样返回304状态码,利用...

    varnish已经修补1.8bug

    然而,随着使用,用户可能会遇到一些bug,比如内存泄漏、性能下降、或者与某些特定配置不兼容的问题。 "修补1.8bug"意味着开发团队发现并解决了这些问题,以提供更可靠的服务。这些修复可能包括优化内存管理以防止...

    fastify-etag:自动为 HTTP 响应生成 etag,用于 Fastify

    一个插件,根据自动生成 HTTP ETag 并在需要时返回 304。 安装 npm i fastify-etag 例子 'use strict' const Fastify = require ( 'fastify' ) const Etag = require ( 'fastify-etag' ) const app = Fastify ( ) ...

    Http Etag 技术分享

    Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用

    HTTP中的ETag是什么意思,如何使用

    HTTP中的ETag是什么意思,如何使用

    RemETag_去除iis的etag_配置ETag_iis性能优化

    Etags原理:Add an Expires header已经对浏览器缓存机制中的Cache-Control和Expires进行了配置,这一条评测的是另外两个:Last-Modified和ETag。简单的说,即使设置了文件的期限,浏览器在访问资源时也会因为Last-...

    HTTP缓存头Last-Modified和ETag介绍

    浏览器在验证缓存时,如果两者都存在,会优先使用ETag,只有当ETag验证失败或者服务器不支持ETag时,才会使用Last-Modified。这种方式称为强验证和弱验证,ETag是强验证,Last-Modified是弱验证。 总结来说,HTTP...

    在多个IIS服务器上同步文件日期时间并修复ETag差异

    日期时间不同的文件将由IIS生成不同的ETag。 结果,在Web服务器场中,每个文件都针对同一文件发送不同的ETag,因为文件在不同的日期时间复制到了这些服务器。 这是一个脚本,可以将多个服务器上同一文件的日期时间...

    Caching HTTP Headers, Last-Modified and ETag

    当ETag不可用时(比如在某些代理服务器环境下),可以退化使用 `Last-Modified`。 标签 "源码" 和 "工具" 提示我们可以深入研究这些HTTP头如何在服务器端代码(如Java的Servlet、Node.js的Express或Python的Flask等...

    java 文件断点续下载源码及实例 支持Etag HTTP认证用户名密码

    1. 请求头If-None-Match:客户端在请求时,将上次获取的Etag值放在If-None-Match头中。 2. 服务器比较:服务器接收到请求后,比较If-None-Match中的Etag与当前资源的Etag。 3. 返回304 Not Modified:如果Etag匹配...

    html静态页面生成

    1. 资源缓存:为了提高性能,可以考虑使用HTTP缓存策略,如ETag或Last-Modified头,让客户端判断是否需要重新获取页面。 2. 静态文件安全:确保静态文件夹的安全设置,防止未授权访问。 3. 错误处理:考虑到可能出现...

    java解决网站静态页面生成方案(源码)

    3. **缓存策略**: 静态页面生成后,需要考虑缓存策略,例如Last-Modified或ETag头,以利用浏览器缓存,进一步提升性能。 4. **文件操作**: Servlet需要写入HTML文件到服务器的某个目录,这涉及到文件I/O操作,包括...

Global site tag (gtag.js) - Google Analytics