本篇博客整理下浏览器的缓存的问题,前面的贴出的一篇博客(点击打开链接),也是这方面的内容。
现在言归正传:
首先在介绍下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来强制刷新,至少我已经养成了习惯了,每次在刷新页面的都是这套组合键。另外也建议大家统一设置了浏览器,每次在退出的时候都删除浏览器缓存,然后一直从服务器刷新等等,方便我们编码和调试。
现在言归正传:
首先在介绍下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();