让tomcat使用强制ETag参数解除浏览器对静态文件的缓存

Etag在HTTP1.1中有介绍,主要的作用就是在(css file, image, javascript file)文件

请求返回的http头加入ETag参数,Etag有服务器端生成,并且随着文件的改变而改变,这样浏览器端就会只重新请求获取 Etag发生变化的文件,减少浏览器端数据的流量,加快浏览器的反应速度,重要的是减轻服务器端的压力,所以服务器端Etag的实现就比较重要了。


ETag有两种,一种是弱类型的(Weak ETag),一种是强类型的(Strong ETag),强类型格式为ETag="文件长-最后修改时间",弱类型是在前面加上W/如:W/"文件长-最后修改时间",在浏览器中监控如下:

1.第一次请求一个静态文件返回:


HTTP/1.1 200 Ok
ETag: W/"1837-1431071955000"


2.第二次请求:


If-None-Match: W/"1837-1431071955000" 
If-Modified-Since: Fri, 08 May 2015 07:59:15 GMT


返回:


HTTP/1.1 304 Not Modified 
ETag: W/"1837-1431071955000" 
Date: Fri, 28 Oct 2016 02:47:04 GMT 


默认情况下使用弱类型的ETag浏览器会忽略设个机制,而且tomcat默认就是使用的这种机制,所以当你更新一个静态文件比如脚本啊或者一个样式文件,发现浏览器里面还是原来的文件,必须清理缓存或者在文件后面加上一个参数才能自动更新浏览器的缓存,而且tomcat也没有可配置的地方能够配置tomcat使用请类型的ETag,下面提供一个方法来修改这个机制,就是继承类org.apache.naming.resources.FileDirContext,重写doGetAttributes,在返回的属性中加入强类型ETag就可以了,代码如下:

package cn.fullstacks.tomcat;

import java.io.File;

import javax.naming.NamingException;
import javax.naming.directory.Attributes;

/**
 * 在http返回头中返回强类型ETag代替tomcat的弱类型ETag
 * 在context.xml中配置
 * 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值