无法清除缓存 博客分类: javascript
修改系统时间所带来的2个坑。
1)tomcat不更新资源文件。
最近需要用JS做一个小功能。大致就是获取服务器的时间,然后判断用户填写的时间是否超时。所以,为了测试,需要频繁的改系统时间。
然后在开发过程,发现浏览器的“缓存”(打了双引号,其实并不是缓存的原因)无论用什么办法都无法清除。后来经过分析,就是修改了系统的时间才导致了“缓存”无法清除(由于把系统时间修改的比当前要早,你修改过的文件,修改时间比tomcat webapp文件夹里面的时间更加早,估计tomcat就是判断修改时间来编译/或者放入最新的java/或者资源文件)。下面,还原一下车祸现场:
1.修改系统时间,当前正确时间为2017年9月19日,我们把系统时间调整为9月18日;
可以看到,tomcat服务器存放得并未和项目文件的同步(eclipse已经刷新了资源)。
而Server中也显示已经同步。即使publish,tomcat下面的依然没有更新。
从以上可以得出结论:tomcat是判断文件的修改时间来同步最新的文件的。(至少上面的现象说明如此)
2.那么我们看看浏览器那边的情况。
首先已经关闭缓存。所以浏览器是从服务器重新获取的js文件。
我在js文件中添加了一个alert。但是无论怎么刷新。这个alert都无法展现。
原因就是tomcat中并没有更新你的文件。
这个烦了我一早上。一直不知道为什么缓存清除不了,以为是浏览器的缓存,结果是tomcat没有更新资源。
2)在js中无法请求https资源
在js中,如果有https的资源请求,那么会因为你修改了系统的时间,无法建立安全的https链接。
这是我在js中请求的https资源。
修改了系统时间,之后控制台会出现以下错误:
我们可以打开百度首页,来让这个问题更加明显:
*tips:需要涉及到时间的功能,测试的时候尽量不要修改系统时间,可以直接传入时间作为参数(可以在这个网站,转化需要的timestamp),而不是偷懒直接修改系统时间,会发生各种问题。以上就是我遇到的。
推荐阅读
-
mysql查询缓存 博客分类: DATABASE mysql查询缓存
-
无法清除缓存 博客分类: javascript
-
js深拷贝和浅拷贝 博客分类: JavaScript javaScript深拷贝浅拷贝
-
js中判断对象具体类型 博客分类: JavaScript javaScript判断对象具体类型
-
js的if中变量判断true/false 博客分类: javascript jsif
-
【转】深入理解JavaScript的变量作用域 博客分类: javascript javascript作用域变量
-
【转】深入理解JavaScript的变量作用域 博客分类: javascript javascript作用域变量
-
js实现的年月日三级联动 博客分类: javascript J#IEFirefox浏览器IDEA
-
判断浏览器类型 博客分类: javascript 浏览器SafariFirefox
-
IE浏览器愚弄了我。。。很郁闷 博客分类: javascript 浏览器IE脚本