问题描述
我有一个非常简单的角度项目,其间隔是周期性添加图像并在几秒钟后将其删除。
图片的标题为Cache-control: max-age: 60
。
我正在监视页面发送的请求,并且看到它第一次添加图像时仅创建一个请求。
在第一个请求之后,页面将永远不会验证图像的新鲜度。 因此,如果我在服务器上替换映像,客户端将永远不会获得新映像。
原因是什么,我能做什么?
示例项目:
https://stackblitz.com/edit/angular-cache-control?file=src%2Fapp%2Fapp.component.html
解决方法
这可能不是最佳解决方案,但是您可以通过向查询应用半随机查询参数来欺骗浏览器,以考虑更改源。
在此示例中,图像将加载查询参数?cacheBust=CURRENT_TIMESTAMP
每次更改图像/切换其可见性时,时间戳都会更新为新值。
https://stackblitz.com/edit/angular-cache-control-rhcqh5?file=src/app/app.component.html
,如果图像更改频繁,那么您需要在图像url中添加一些随机字符串,以便每次获取新图像时都使用
。如果图像更换频繁,则添加当前时间戳。
如果图像更改为几天,则可以基于日期添加新的随机字符串。
如果您的图片名称是动态的,我的意思是您将从服务器获取图片名称,然后每次更改图片名称,这样它将获得新的图片。
,我的回答:不可能。
brwoser可能有一个缓存结尾,即使在将其从DOM中删除后,该结尾仍保存该图像。因此,当我将他的图像再次添加到DOM时,浏览器不会创建新请求。