zoukankan      html  css  js  c++  java
  • 解决浏览器缓存

    本篇博客整理下浏览器的缓存的问题,前面的贴出的一篇博客(点击打开链接),也是这方面的内容。

    我们在实际编码和调试的过程中经常发生我们已经修改过代码和逻辑,但是刷新页面还是没有变化,实际上是变化了的,只不过浏览器自作聪明,将我们的前面几次的访问的内容给缓存起来了,如何解决这个问题呢?对于我们编码的过程中可以使用CTRL+F5来强制刷新,至少我已经养成了习惯了,每次在刷新页面的都是这套组合键。另外也建议大家统一设置了浏览器,每次在退出的时候都删除浏览器缓存,然后一直从服务器刷新等等,方便我们编码和调试。


    每个浏览器都有缓存机制的,我们可以来看一看。这里以IE为例子,Internet选项-->浏览历史记录-->设置-->查看文件-->C:UsersLinkinParkAppDataLocalMicrosoftWindowsTemporary 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(); 

  • 相关阅读:
    Maven实战读书笔记(三):Maven依赖
    Maven实战读书笔记(四):Maven生命周期与插件
    Maven实战读书笔记(一):Maven概述
    Spring Data Redis入门示例:程序配置(五)
    Spring Data Redis入门示例:字符串操作(六)
    zabbix api使用
    elasticsearch mappings之dynamic的三种状态
    自动添加windows 2012用户,并在jump添加授权
    python 查询es数据
    python获取zabbix Triggers top100
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5232999.html
Copyright © 2011-2022 走看看