已经注入了过滤器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");
分享到:
相关推荐
同时,`ETag`的生成方式也可以多样化,例如根据文件的修改时间或者其他唯一标识来生成。 通过这样的缓存控制中间件,我们可以有效地利用HTTP缓存机制,提高服务性能,减轻服务器负载。然而,缓存策略的选择和实现...
3. **考虑性能**:在大型应用中,可能需要优化Etag的生成策略,比如使用弱校验符(Weak Etag,以"W/"开头)或者基于资源内容的哈希值生成Etag,以降低服务器负载。 总结,Etag是HTTP缓存机制的关键组成部分,它帮助...
- **使用强Etag**:强Etag(不带引号的Etag)基于资源内容生成,只要内容改变,Etag就会改变。避免使用弱Etag(带引号的Etag),因为它们只在资源的实体标签发生更改时才发生变化,可能引入不必要的复杂性。 - **...
中间件的工作原理是,它会在响应发送到客户端之前计算资源的哈希值,然后将其作为Etag头字段添加到响应中。在后续的请求中,如果资源未更改,中间件会检查客户端发送的If-None-Match头,如果Etag匹配,则返回304 Not...
弱ETag不区分大小写,并且允许一些元信息的变化而不改变其值,这通常用在资源内容变化不大但不影响功能的情况,比如CSS或JavaScript文件的压缩和格式化。 这个中间件的实现可能包含以下步骤: 1. 定义中间件类:在...
Etag是服务器为每个资源生成的一个唯一标识,它能更准确地判断资源是否发生变化。当客户端再次请求时,会发送If-None-Match报头,包含上次接收到的Etag值。如果服务器发现资源的Etag未变,同样返回304状态码,利用...
然而,随着使用,用户可能会遇到一些bug,比如内存泄漏、性能下降、或者与某些特定配置不兼容的问题。 "修补1.8bug"意味着开发团队发现并解决了这些问题,以提供更可靠的服务。这些修复可能包括优化内存管理以防止...
一个插件,根据自动生成 HTTP ETag 并在需要时返回 304。 安装 npm i fastify-etag 例子 'use strict' const Fastify = require ( 'fastify' ) const Etag = require ( 'fastify-etag' ) const app = Fastify ( ) ...
Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用
HTTP中的ETag是什么意思,如何使用
Etags原理:Add an Expires header已经对浏览器缓存机制中的Cache-Control和Expires进行了配置,这一条评测的是另外两个:Last-Modified和ETag。简单的说,即使设置了文件的期限,浏览器在访问资源时也会因为Last-...
浏览器在验证缓存时,如果两者都存在,会优先使用ETag,只有当ETag验证失败或者服务器不支持ETag时,才会使用Last-Modified。这种方式称为强验证和弱验证,ETag是强验证,Last-Modified是弱验证。 总结来说,HTTP...
日期时间不同的文件将由IIS生成不同的ETag。 结果,在Web服务器场中,每个文件都针对同一文件发送不同的ETag,因为文件在不同的日期时间复制到了这些服务器。 这是一个脚本,可以将多个服务器上同一文件的日期时间...
当ETag不可用时(比如在某些代理服务器环境下),可以退化使用 `Last-Modified`。 标签 "源码" 和 "工具" 提示我们可以深入研究这些HTTP头如何在服务器端代码(如Java的Servlet、Node.js的Express或Python的Flask等...
1. 请求头If-None-Match:客户端在请求时,将上次获取的Etag值放在If-None-Match头中。 2. 服务器比较:服务器接收到请求后,比较If-None-Match中的Etag与当前资源的Etag。 3. 返回304 Not Modified:如果Etag匹配...
1. 资源缓存:为了提高性能,可以考虑使用HTTP缓存策略,如ETag或Last-Modified头,让客户端判断是否需要重新获取页面。 2. 静态文件安全:确保静态文件夹的安全设置,防止未授权访问。 3. 错误处理:考虑到可能出现...
3. **缓存策略**: 静态页面生成后,需要考虑缓存策略,例如Last-Modified或ETag头,以利用浏览器缓存,进一步提升性能。 4. **文件操作**: Servlet需要写入HTML文件到服务器的某个目录,这涉及到文件I/O操作,包括...