无法清除缓存

修改系统时间所带来的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),而不是偷懒直接修改系统时间,会发生各种问题。以上就是我遇到的。
 

相关推荐