在浏览器中禁用图像缓存

Disable images caching in browser

我有一个地球天气 Web 应用程序,它每六小时接收一次新的天气图(作为图像)。我想让浏览器不缓存这些图像,让用户体验前几天没有缓存的新鲜天气。 我的设置是:

我尝试添加到 header 的 index.html 元数据:

  <meta http-equiv='cache-control' content='no-cache'>
  <meta http-equiv='expires' content='0'>
  <meta http-equiv='pragma' content='no-cache'>

这些纹理是这样加载的:

   this.ParticlesVelocitiesImage = new Image();
   this.ParticlesVelocitiesImage.src = require('./Textures/dirswindsigma995.jpg');
   this.ParticlesVelocitiesImage.onload = () => {
       this.ParticlesVelocities = this.gl.createTexture();
       this.gl.bindTexture(this.gl.TEXTURE_2D, this.ParticlesVelocities);
       this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.ParticlesVelocitiesImage.width,
       this.ParticlesVelocitiesImage.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, this.ParticlesVelocitiesImage)
       this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.LINEAR);
       this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.LINEAR);
    }

但是纹理仍然被缓存。我需要手动清除缓存才能体验最新更新的天气图

更新 在 Reactgular 和 gman 响应之后,我开始寻找另一种加载图像的方式。因此,我在组件的 HTML 模板中添加了 <img hidden="true" [src] = "urlwith?timestamp"> 标记,而不是 require(),并在问号后提供 url 和时间戳。然后剩下的是一样的,图像的 onload 功能被触发,我的纹理被加载。但是因为我的 webgl2 应用程序非常需要性能,所以我宁愿避免在 HTML 中渲染其他图像。

这不是纹理问题,而是 <img> 问题。假设的解决方案是您需要从服务器发送正确的 headers 以告诉浏览器不要缓存纹理。如果您无法设置正确的 headers,解决方法是向图像添加查询参数 URL。

const imageUrl = `./Textures/dirswindsigma995.jpg?${Date.now()}`;

现在,每次您请求图片时,浏览器都会看到不同的 URL

请注意,您不太可能为此使用 require