某一天,客服反馈,说用户购买某一产品时,提交订单失落败,并发来用户的接口提示。我一看,这不是昨天晚长进级之前的页面吗?昨天验证过没有问题呢。为什么用户看到的是老的页面?该当是缓存的缘故原由。回客服,让客户多刷新下页面,重新购买就可以了。
问题倒是办理了,但是客户体验非常不好,不能让老客户进来都重多次刷新页面吧!
有没有方法可以解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缓存的办理
前端页面处理方法
禁止客户端缓存要在<head>中加入类似如下内容:
<meta http-equiv=\公众pragma\"大众 content=\"大众no-cache\公众> <meta http-equiv=\公众cache-control\"大众 content=\公众no-cache\"大众> <meta http-equiv=\公众expires\公众 content=\公众0\"大众>
不设置超时时间
<%response.setHeader(\公众Cache-Control\"大众,\公众no-store\"大众);response.setHeader(\"大众Pragrma\"大众,\公众no-cache\"大众);response.setDateHeader(\"大众Expires\公众,0);%>
设置超时时间10分钟
<%int minutes = 10; Date d = new Date(); String modDate = d.toGMTString(); String expDate = null; expDate = (new Date(d.getTime() + minutes 60000)).toGMTString(); response.setHeader(\公众Last-Modified\"大众, modDate); response.setHeader(\"大众Expires\"大众, expDate); response.setHeader(\"大众Cache-Control\"大众, \"大众public\"大众); // HTTP/1.1 response.setHeader(\公众Pragma\"大众, \"大众Pragma\"大众); // HTTP/1.0 %>
后端处理方法
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); } }
三、Js、css缓存的办理
Js或者css会被浏览器缓存下来,只有浏览看重启后才会删除,乃至重启都不会删除。这样用户可能看到的便是缓存的页面效果。会照成生产问题。怎么办理呢?
方法一
在js或者css地址后面添加韶光戳或者随机数,这样每次要求都是新的地址,可以骗过浏览器的缓存,每次去做事器获取最新的代码。但是每次都去要求做事器获取新的代码,会占用带宽。
<link rel=\"大众stylesheet\"大众 href=\"大众/Resource/css/webapp_reset.css?s=<%=System.currentTimeMillis()%>\公众/> <script type=\"大众text/javascript\公众 src=\"大众/Resource/js/mobiscroll.custom-2.16.1.min.js?s=<%=Math.random()%>\"大众 ></script>
方法二
可以添加版本号,每次修正的话在地址后面天生新的版本号,可以用系统韶光作为当前更新的版本号。
<script type=\"大众text/javascript\"大众 src=\"大众/Resource/js/mobiscroll.custom-2.16.1.min.js?version=20190908\"大众 ></script>
搞定!
!
喜好的朋友可以关注下~