from spring 3:
You can re-write it with your requirement
---
So I have in web.xml:
Code:
<filter>
<filter-name>pageNotFoundFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
and in my context.xml I have a bean called "pageNotFoundFilter". Very nice !
---
<filter>
<filter-name>etagFilter</filter-name>
<filter-class>org.xxx.web.filter.EtagHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>etagFilter</filter-name>
</filter-mapping>
ShallowEtagResponseWrapper responseWrapper = new ShallowEtagResponseWrapper(response);
filterChain.doFilter(request, responseWrapper);
byte[] body = responseWrapper.toByteArray();
String responseETag = generateETagHeaderValue(body);
response.setHeader(HEADER_ETAG, responseETag);
String requestETag = request.getHeader(HEADER_IF_NONE_MATCH);
if (responseETag.equals(requestETag)) {
if (logger.isTraceEnabled()) {
logger.trace("ETag [" + responseETag + "] equal to If-None-Match, sending 304");
}
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
else {
if (logger.isTraceEnabled()) {
logger.trace("ETag [" + responseETag + "] not equal to If-None-Match [" + requestETag +
"], sending normal response");
}
response.setContentLength(body.length);
FileCopyUtils.copy(body, response.getOutputStream());
}
分享到:
相关推荐
`Response::etag($etag)`方法用于设置`Etag`头,`$etag`通常是资源的哈希值或其他能唯一标识资源的字符串。Laravel还提供了`ETag`中间件,可以自动处理资源的`Etag`验证和缓存响应。 压缩包文件名称`laravel-etag-...
Etag是服务器响应请求时,返回当前资源文件的一个唯一标识,通常是一个字符串,它能反映出资源的修改情况。这个标识允许客户端(如浏览器)在后续请求中通过If-None-Match头来验证资源是否已经改变,从而避免不必要...
`Laravel Etag Middleware` 是一个专为提升响应时间和优化资源缓存策略而设计的组件。本文将深入探讨Etag的概念,以及如何在Laravel中利用这个中间件来实现更优秀的性能优化。 Etag,全称Entity Tag,是一种HTTP...
2. 添加处理逻辑:在`handle`方法中,获取响应对象,计算资源的弱ETag值,然后通过`$response->getETag()`方法设置ETag,使用`weak`标志表示它是弱ETag。 ```php public function handle($request, Closure $next) ...
相比于 `Last-Modified`,ETag 更加精确,因为它基于资源内容,即使修改时间相同,只要内容变化,ETag就会改变。但这也意味着计算和存储ETag需要更多的服务器资源。 在实际应用中,开发者通常会结合使用 `Last-...
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-...
本篇我们将深入探讨如何使用Go来实现一个缓存控制中间件,特别是关于添加`ETag`头(基于内容的MD5哈希)和`Cache-Control`头。 `ETag`(Entity Tag)是HTTP响应头中的一个字段,用于标识资源的特定版本。它通常是...
《Etag与Expires:优化页面缓存的策略》 在网页加载速度和用户体验日益重要的今天,有效的页面缓存机制成为了提高网站性能的关键。Etag和Expires是两种常见的HTTP缓存策略,它们各自有不同的工作原理和应用场景。...
ETag-Session use etag to realize the mechanism of session 项目采用koa作为web框架 采用Bigpipe实现客户端对服务端事件的订阅 此处只是简单的将数据存储在内存中,并且在多服务集群下未做同步,因为此处的目的是...
当客户端再次请求同一资源时,可以将上次获取的Etag值发送给服务器,服务器会比较当前资源的Etag是否与之匹配。 1. 请求头If-None-Match:客户端在请求时,将上次获取的Etag值放在If-None-Match头中。 2. 服务器...
Koa异步ETag +/-异步版本的 。 :light_bulb: 该中间件是为 v2.xx设计的,并使用来实现ES5兼容性。 :wrench: 该中间件正在开发中。 反馈/公关受到欢迎和鼓励。 如果您想在这个项目上进行合作,请告诉我。 安装 $...
fastify-etag 一个插件,根据自动生成 HTTP ETag 并在需要时返回 304。 安装 npm i fastify-etag 例子 'use strict' const Fastify = require ( 'fastify' ) const Etag = require ( 'fastify-etag' ) const app =...
缓存ETag标头,并通过If-None-Match标头将它们发送回服务器。 使用灵活的缓存配置来缓存响应数据。 支持$cacheFactory , sessionStorage和localStorage开箱即localStorage缓存。 轻松于其他第三方缓存服务。 与...
本文将深入探讨两个关键的缓存机制:Etag与If-None-Match以及Last-Modified与If-Modified-Since。 1. Etag与If-None-Match: Etag(Entity Tag)是一种用于标识资源版本的机制。服务器在响应头中设置Etag,它通常是...