请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

原创|前端缓存引发的生产问题和解决方案

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
150505oz2d7wfzf72wiu77.jpg


某一天,客服反馈,说客户购买某一产品时,提交订单失败,并发来客户的接口提示。我一看,这不是昨天晚上更新之前的页面吗?昨天验证过没有问题呢。为什么客户看到的是老的页面?应该是缓存的原因。回客服,让客户多刷新下页面,重新购买就可以了。
问题倒是处理了,但是客户体验非常不好,不能让老客户进来都重多次刷新页面吧!有没有方法可以解jsp、html或者js的缓存问题呢?
前言
处理前台缓存问题,就需要页面加载的时候,不去读取浏览器的缓存,而是从Web服务器上重新获取页面。

  • 方法的讲解
  • Jsp、html缓存的处理
  • Js、css缓存的处理


一、方法讲解
服务端方法
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
Pragma头域用来包含实现特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。
Cache -Control指定请求和响应遵循的缓存机制,no-cache指示请求或响应消息不能缓存。
Expires 响应头包含日期/时间, 即在此时候之后,响应过期,无效的日期,比如 -10, 代表着过去的日期,即该资源已经过期。
客户端方法
meta 是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目 前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和 keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个:
name 属性
1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等;
2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;
3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;
4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;
5、<meta name="Robots" contect="all|none|index|noindex|follow|nofollow">
http-equiv属性
1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;又如英文是ISO-8859-1字符集,还有BIG5、utf-8、 shift-Jis、Euc、Koi8-2等字符集;
2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n内,跳转到页面http;//yourlink;
3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必需到服务器上重新调用。需要注意的是必需使用GMT时间格式;
4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;
5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必需使用GMT时间格式;
6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;
7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;
8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion= 50)">和<meta http-equiv="Page-Exit" contect="revealTrans(duration=20,transtion =6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。
二、Jsp、html缓存的处理
前台页面处理方法
禁止客户端缓存要在中加入相似如下内容:



不设置超时时间

设置超时时间10分钟

后端处理方法
public class CacheJiejue extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//指定该页面不缓存
response.setDateHeader("Expires",-1); //IE游览器支持的
//保证兼容性
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragme", "no-cache");
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}

}




150505y666lg2ger1rg1tg.jpg








150506j1yx5mmy1x1ysjp6.jpg






三、Js、css缓存的处理
Js或者css会被浏览器缓存下来,只有浏览器重启后才会删除,甚至重启都不会删除。这样客户可能看到的就是缓存的页面效果。会照成生产问题。怎样处理呢?
方法一
在js或者css地址后面添加时间戳或者随机数,这样每次请求都是新的地址,可以骗过浏览器的缓存,每次去服务器获取最新的代码。但是每次都去请求服务器获取新的代码,会占用带宽。


方法二
可以添加版本号,每次修改的话在地址后面生成新的版本号,可以用系统时间作为当前更新的版本号。



搞定!!喜欢的朋友可以关注下~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 7 帖子
广告招商