码迷,mamicode.com
首页 > 编程语言 > 详细

Java实现缓存页面中不变的元素,JS,CSS,图片等

时间:2015-10-14 14:17:15      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

本文是Web前端性能优化系列文章中的第三篇,主要讲述添内容:加Expires头。完整教程可查看:Web前端性能优化

什么是Expires头?

Expires存储的是一个用来控制缓存失效的日期。当浏览器看到响应中有一个Expires头时,它会和相应的组件一起保存到其缓存中,只要组件没有过期,浏览器就会使用缓存版本而不会进行任何的HTTP请求。Expires设置的日期格式必须为GMT格林尼治标准时间)。

HTTP1.1协议中缓存的另一种选择

Expires存在着明显的不足。

首先,Expires头使用的是一个特定的时间,要求客户端和服务器端的时钟严格同步。何为严格同步?我们知道客户端的时间是可以修改的,如果服务器和客户端的时间不统一,这就导致有可能出现缓存提前失效的情况,存在不稳定性。其次,假如Expires的日期到来了,那么还需要在服务器配置中提供一个新的日期。

面对这种情况,HTTP1.1引入了Cache-Control头来克服Expires头的限制。Cache-Control使用max-age制定组件被缓存多久,使用秒为单位,例如Cache-Control:max-age=3600;表示组件将被缓存60分钟。如果max-age和Expires同时出现,则max-age有更高的优先级,浏览器会根据max-age的时间来确认缓存过期时间。

Cache-Control除了可以设置max-age之外,还可以同时设置其他标签。如下图所示常用标签:

技术分享

 

针对(CSS/JS/IMAGE)等静态文件的缓存解决办法是,加一个Filter,这些文件的响应头加上对应的过期时间,

 

 1 package as.inet.filter;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.FilterConfig;
 8 import javax.servlet.ServletException;
 9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 
14 public class ResponseHeaderFilter implements Filter {
15     
16       FilterConfig fc; 
17     
18     @Override
19     public void destroy() {
20         this.fc = null;
21     }
22 
23     /**
24      * 
25     * @Description:renlu
26      * @author renlu 2015年10月14日 下午1:29:33
27      */
28     @Override
29     public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
30             throws IOException, ServletException {
31 
32         HttpServletRequest request=(HttpServletRequest)req;
33         HttpServletResponse response = (HttpServletResponse) res;
34         String uri=request.getRequestURI();  
35         
36         if (uri.indexOf("/css/")!=-1||uri.indexOf("/js/")!=-1||uri.indexOf("/images")!=-1) {
37             
38                 response.setHeader("Cache-Control", "public"); // HTTP/1.1 开启缓存
39                 response.setHeader("Pragma", "Pragma"); // HTTP/1.0 开启缓存
40                 response.setHeader("Cache-Control","max-age=604800, public");  
41                doFilter(req, res, chain);
42     }
43 
44         chain.doFilter(request, response);    
45         
46     }
47 
48     @Override
49     public void init(FilterConfig filterConfig) throws ServletException {
50           this.fc = filterConfig;
51     }
52 
53 }

 

Java实现缓存页面中不变的元素,JS,CSS,图片等

标签:

原文地址:http://www.cnblogs.com/thinkpad/p/4877211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!