解决浏览器缓存
2015-07-29 12:19
435 查看
本篇博客整理下浏览器的缓存的问题,前面的贴出的一篇博客(点击打开链接),也是这方面的内容。
我们在实际编码和调试的过程中经常发生我们已经修改过代码和逻辑,但是刷新页面还是没有变化,实际上是变化了的,只不过浏览器自作聪明,将我们的前面几次的访问的内容给缓存起来了,如何解决这个问题呢?对于我们编码的过程中可以使用CTRL+F5来强制刷新,至少我已经养成了习惯了,每次在刷新页面的都是这套组合键。另外也建议大家统一设置了浏览器,每次在退出的时候都删除浏览器缓存,然后一直从服务器刷新等等,方便我们编码和调试。
每个浏览器都有缓存机制的,我们可以来看一看。这里以IE为例子,Internet选项-->浏览历史记录-->设置-->查看文件-->C:\Users\LinkinPark\AppData\Local\Microsoft\Windows\Temporary Internet Files,这样子就找到IE缓存文件的文件夹了,里面放着好多我们平时缓存文件。
现在言归正传:
首先在介绍下3个HTTP响应头字段
Cache-Control:no-cache
Pragma:no-cache
Expires:-1
上面这3个标签都是用来告诉浏览器如果缓存页面,为了保证浏览器之间的兼容性,以后在自己编码处理缓存的时候这3个响应头字段都要设置过的。
实际中有2种情况,1,有些网站对及时性要求很高,要求我们不缓存页面。2,有些网站要求缓存一段时间,一段时间都会重新到服务器上获取数据。
另外还有一个小的技巧,比如我们在登陆的时候获取验证码,可以在jsp的url后面增加一个随机数或者是当前的时间,这样子就可以解决浏览器的缓存,和上面的解决方式完全不同,这里只是交url改变成了新的不同的url,当然会重新发送请求了。
url=test.jsp?time=new Date().getTime();
url=test.jsp?number=Math.random();
我们在实际编码和调试的过程中经常发生我们已经修改过代码和逻辑,但是刷新页面还是没有变化,实际上是变化了的,只不过浏览器自作聪明,将我们的前面几次的访问的内容给缓存起来了,如何解决这个问题呢?对于我们编码的过程中可以使用CTRL+F5来强制刷新,至少我已经养成了习惯了,每次在刷新页面的都是这套组合键。另外也建议大家统一设置了浏览器,每次在退出的时候都删除浏览器缓存,然后一直从服务器刷新等等,方便我们编码和调试。
每个浏览器都有缓存机制的,我们可以来看一看。这里以IE为例子,Internet选项-->浏览历史记录-->设置-->查看文件-->C:\Users\LinkinPark\AppData\Local\Microsoft\Windows\Temporary Internet Files,这样子就找到IE缓存文件的文件夹了,里面放着好多我们平时缓存文件。
现在言归正传:
首先在介绍下3个HTTP响应头字段
Cache-Control:no-cache
Pragma:no-cache
Expires:-1
上面这3个标签都是用来告诉浏览器如果缓存页面,为了保证浏览器之间的兼容性,以后在自己编码处理缓存的时候这3个响应头字段都要设置过的。
实际中有2种情况,1,有些网站对及时性要求很高,要求我们不缓存页面。2,有些网站要求缓存一段时间,一段时间都会重新到服务器上获取数据。
/** * */ package test11; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author: LinkinPark * @date: 2015年7月26日 下午7:13:53 * @version:1.0 * Desk: 处理浏览器缓存问题 */ public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); // 下面3个响应头用来统一设置不缓存 resp.setDateHeader("Expires", -1); resp.setHeader("Cache-Control", "no-cache"); resp.setHeader("Pragma", "no-cache"); // 如果想要指定一段的缓存时间(比如一个小时),直接设置Expires即可 resp.setDateHeader("Expires", System.currentTimeMillis() + 1000 * 3600); PrintWriter out = resp.getWriter(); out.println("现在的时间是:" + new Date()); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
另外还有一个小的技巧,比如我们在登陆的时候获取验证码,可以在jsp的url后面增加一个随机数或者是当前的时间,这样子就可以解决浏览器的缓存,和上面的解决方式完全不同,这里只是交url改变成了新的不同的url,当然会重新发送请求了。
url=test.jsp?time=new Date().getTime();
url=test.jsp?number=Math.random();
相关文章推荐
- UIImage的2种加载方式
- android实现轮播图
- 解决浏览器缓存
- Ehcache 中ehcache.xml 配置详解和示例
- Work(树DP模板题)
- Remove Duplicates from Sorted List
- leetcode-Merge Two Sorted Lists
- 深入掌握JMS(八):JMSReplyTo
- Android 讲义第二版 ViewSwitcher + GestureDetector 练习
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化
- 关于差分约束系统的建图方法
- Jquery结合datagrid框架
- 关于java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor异常
- HDU 5319 Painter
- swift之函数式编程(二)
- js Unicode编码转换
- 深入掌握JMS(七):DeliveryMode例子
- JVM以及GC
- C++ sort(),stable_sort()和partial_sort()
- HTTP Header