Filter的浏览器端缓存设置

前段时间做了个Filter,对Jar包中的静态资源进行处理。做了服务器端缓存,虽然文件不用每次都提取了,但是还是需要每次通过网络将页面发送给浏览器。最好是做到浏览器端缓存。参考了struts2的org.apache.struts2.dispatcher.DefaultStaticContentLoader的实现:

 

Calendar cal = Calendar.getInstance();
Calendar lastModifiedCal = Calendar.getInstance();
long now = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_MONTH, 1);
long expires = cal.getTimeInMillis();
long lastModifiedMillis = lastModifiedCal.getTimeInMillis();

if (request.getDateHeader("If-Modified-Since") > iLastModified) {
	//火狐等第二次请求开始都走这
	response.setDateHeader("Expires", expires);
	response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);     
} else {
	//IE第一次走着,以后只要没过期,就不发请求了
	response.setDateHeader("Date", now);
	response.setDateHeader("Expires", expires);
	response.setDateHeader("Retry-After", expires);
	response.setHeader("Cache-Control", "public");
	response.setDateHeader("Last-Modified", lastModifiedMillis);
	
	res.getOutputStream().write(bBuf);
	res.flushBuffer();
}

纠结的问题永远是相同的:浏览器标准不一。W3C定义的应该是通过If-Modified-Since,但是IE不用这个,他检测Expires和Retry-After。这样确实有好处:以后都不用发请求了,但是坏处也是很明确的:标准不同一了,无法确认啥时候不过期。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值